Keresés

Aktív témák

  • OddMan

    őstag

    Szeretnék csinálni egy nagyon egyszerű 3D-s világot, ami meg tud jeleníteni egy vagy több egyszerű alakzatot pl.: kockát, hengert meg egy-két transzformációt is ismerni fog pl. nagyítás, kicsinyítés, forgatás, csavarás, stb...
    OpenGL-t már programozgattam, de most OpenGL és DirectX nélkül szeretném ezt megoldani, mert érdekel, hogyan is lehet megvalósítani egy ilyen grafikus rendszert. Tudom, hogy igen lassú lesz, de nem a sebesség a cél, hanem a legalapvetőbb matematikai elméletek kipróbálása. pl.: mátrix műveletek, vektoriális szorzás stb.
    Sajnos már az elején elakadtam, mert nem tudom, hogyan lehet egy térben lévő vektort síkba a monitorra leképezni. Tehát mondjuk, van egy pontom a térben, aminek van X,Y,Z koordinátája. A probléma az, hogy a monitor sík és azon csak síkban lehet megjeleníteni a pontot, aminek így már csak X és Y koordinátája van. Vagyis a térbeli pontot le kell valahogyan vetíteni a képernyő síkjának egy pontjára.
    Szóval a 3D->2D leképzés vagy más néven vetítés folyamatát nem ismerem. Ebben kellene egy kis segítség.
    Vagy talán valami kameraféleséget kellene definiálni? :U
    Egyébként Visual C++ környezetben programozgatok, ha ez számít valamit.
    :U


    [Szerkesztve]

    ''A szíved szabad! Légy bátor és kövesd!''

  • OddMan

    őstag

    válasz OddMan #1 üzenetére

    Leírom mégegyszer egyszerűbben: Tehát a modell koordinátákat kellene képernyő korordinátákká alakítani. Huh... :DDD

    ''A szíved szabad! Légy bátor és kövesd!''

  • OddMan

    őstag

    válasz BaLinux #3 üzenetére

    Miért kell homogén koordinátákat használni, amihez így már 4x4-es mátrixokat kell használni a 3x3 helyett? :U
    A különböző transzformációkat értem, pl.: forgatás, de ezt a perpektivikus vetítést még mindig nem. Hogy néz ki egy végleges (használható) vetítési mátrix? :U


    [Szerkesztve]

    ''A szíved szabad! Légy bátor és kövesd!''

  • OddMan

    őstag

    válasz Neo... #6 üzenetére

    Visual C++-ot használtam, használok. Azért ezt, mert a szükséges file-ok már alapban benne vannak és a debuggere is jó. A devc nekem nem jött be. Akkor inkább már a freeware BC5.5.

    MÁS:
    Ezt dx-es tutoriálból ollóztam.
    ''Az X file egy olyan formátum, amely minden szükséges információt tartalmaz, amire egy mesh rajzolásához szükség lehet, sõt néha még többet is, mint például animációt, satöbbi. De hogy miért is jó nekünk hogy ebben a formában tároljuk a hálót? Nos a DirectX SDK-hoz van két plugin; az egyik a 3DStudioMax-hoz, míg a másik Mayahoz. Ezek exportáló pluginok, amelyekkel az ott elkészített hálókat, sõt jeleneteket elmenthetjük ebbe a formátumba, így a modelleket elkészíthetjük valamelyik programban, nem kell egy pár ezer vertexet begépelni és ami a nagyobb meló lenne, kiszámolni.''
    Ilyen pluginokat fg.-ket tartalmaz az OpenGL? :U


    [Szerkesztve]

    ''A szíved szabad! Légy bátor és kövesd!''

  • OddMan

    őstag

    válasz BaLinux #12 üzenetére

    És tudnál írni egy linket, ahonnét letölthetnék egy ilyen lib-et?

    ''A szíved szabad! Légy bátor és kövesd!''

  • OddMan

    őstag

    Írjatok egy linket légyszi, ahonnan leszedhetek egy olyan lib-et, amivel könnyedén tudok betölteni valamilyen 3ds max vagy maya-val készített modell file-t.
    Köszke! :R

    ''A szíved szabad! Légy bátor és kövesd!''

  • OddMan

    őstag

    Ez a mátrix is jó lehet? :U



    x' = x/z*d
    y' = y/z*d
    z' = d

    [1 0 0 0]
    [X'h, Y'h, Z'h, h] = [x,y,z,1] * [0 1 0 0]
    [0 0 1 1/d]
    [0 0 0 0]



    3D-s könyvből néztem, csak nem tudom, hogy ez a mátrix segíti-e a dimenziócsökkentő transzformációt. :U


    [Szerkesztve]

    ''A szíved szabad! Légy bátor és kövesd!''

  • OddMan

    őstag

    A MilkShape3D progi tud exportálni Milkshape 3D ASCII file-t, ami egy sima txt.
    Ez egy nagyon egyszerű formátum és ehhez már tudok írni egy saját loader progit, amivel majd be tudok tölteni modelleket. Sikerült a quake2 játékból kiszednem egy md2 modellt, amit át is alakítottam txt formátumúvá. A baj csak az, hogy nem maradt meg az animáció, csak egyetlen képkockája a legelső. Tud nekem valaki abban segíteni, hogy mit kéne beállítani ahhoz, hogy export-kor az egész animációt áttegye a txt file-ba? :U


    [Szerkesztve]

    ''A szíved szabad! Légy bátor és kövesd!''

  • OddMan

    őstag

    válasz BaLinux #27 üzenetére

    Tudnál mondani egy címet, ahonnét letölthetem az általad említett loader-t?


    [Szerkesztve]

    ''A szíved szabad! Légy bátor és kövesd!''

  • OddMan

    őstag

    Találtam egy linket az MD2 file formátumról.
    Bővebben: link

    Ez alapján próbálom majd betölteni a file-t meg a BaLinux-tól kapott link segítségével.
    Az MD2 fájlformátum tanulmányozásakor találtam egy ''Using OpenGL commands'' részt.


    struct MD2GLcmds
    {
    float s,t
    int vertex_index;
    }


    Tehát az offsetGLcmds mutatja, hogy a fájl melyik offset címétől kezdődik ez a rész. a numGLcmds mutatja, hogy összesen hány darab hálót találunk. Az első int abszolút értéke a hálóban lévő csúcsok száma. Ha az előjel negatív, akkor GL_TRIANGLE_FAN-t kell használni, ha pozitív, akkor meg GL_TRIANGLE_STRIP-et.
    Azt nem tudom, hogy ezek az adatok elegek-e ahhoz, hogy textúra nélkül megjelenítsem a modellt? Egyelőre se, animálni se textúrázni nem akarok, csak beolvasni a modellt és késsz. Meg azt is tudnom kellene, hogy hány összetartozó csúcsot kell beolvasnom az animáció első képkockájának megjelenítéséhez, mivel az már tartalmazza a modellt valamilyen állásban.
    BaLinux: ha te már írtál ilyen progit, akkor légyszi segíts! Köszke!


    [Szerkesztve]

    ''A szíved szabad! Légy bátor és kövesd!''

  • OddMan

    őstag

    válasz BaLinux #31 üzenetére

    Köszi a segítséget!
    BaLinux: Nincsen véletlenűl valamilyen jó magyar nyelvű leírásod csak a matematikai alapokról. A programozás meg az ilyesmik angol nyelven is okék, de keresek valamilyen jól érthető magyar nyelvű doksit, ahol csak a 3D grafikához szükséges matekkal foglalkoznak. Sosem voltam nagy matekos ezért kellene valamilyen jól érthető leírás, jegyzet. :U

    ''A szíved szabad! Légy bátor és kövesd!''

  • OddMan

    őstag

    Milkshape 3D ASCII file format?

    // háromszögek száma
    20
    // vertex: flags, x, y, z, u, v, bone index
    0 -10.375000 10.500000 13.750000 0.000000 0.000000 -1
    0 -10.375000 -10.250000 13.750000 0.000000 1.000000 -1


    Aztán ezután jön még egy ilyen rész ???

    //talán a normál vektorok száma?
    20
    -10.375000 10.500000 13.750000
    -10.375000 10.500000 13.750000

    és a végén egész számok ???
    20
    0 121 90 89 64 14 49 1
    0 119 121 89 63 64 49 1
    0 122 123 90 65 51 14 1
    0 121 122 90 64 65 14 1

    Tehát a fájl második és harmadik részét nem értem.
    Amikor majd megrajzolom a modellt mondjuk a glEnable(GL_TRIANGLES)-el, akkor mindig 3 sor fog egybetartozni ugye? :U :F

    ''A szíved szabad! Légy bátor és kövesd!''

  • OddMan

    őstag

    Na időközben sikerült megtalálnom a leírást és sikerült is kitennem egy modelt a képernyőre. Be is másolta ide, hátha mást is érdekel.
    OpenGL-ben hogyan lehet azt beállítani, hogy csak drótváz legyen? :U

    // MilkShape 3D ASCII File Format Specification: 1 box, 1 material, a simple animation

    // total frames
    Frames: 30

    // current frame
    Frame: 1

    // number of meshes
    Meshes: 1

    // mesh: name, flags, material index
    ''Box01'' 0 0

    // number of vertices
    20

    // vertex: flags, x, y, z, u, v, bone index
    0 -10.375000 10.500000 13.750000 0.000000 0.000000 -1
    0 -10.375000 -10.250000 13.750000 0.000000 1.000000 -1
    0 10.375000 10.500000 13.750000 1.000000 0.000000 -1
    0 10.375000 -10.250000 13.750000 1.000000 1.000000 -1
    0 10.375000 10.500000 13.750000 0.000000 0.000000 -1
    0 10.375000 -10.250000 13.750000 0.000000 1.000000 -1
    0 10.375000 10.500000 -4.500000 1.000000 0.000000 -1
    0 10.375000 -10.250000 -4.500000 1.000000 1.000000 -1
    0 10.375000 10.500000 -4.500000 0.000000 0.000000 -1
    0 10.375000 -10.250000 -4.500000 0.000000 1.000000 -1
    0 -10.375000 10.500000 -4.500000 1.000000 0.000000 -1
    0 -10.375000 -10.250000 -4.500000 1.000000 1.000000 -1
    0 -10.375000 10.500000 -4.500000 0.000000 0.000000 -1
    0 -10.375000 -10.250000 -4.500000 0.000000 1.000000 -1
    0 -10.375000 10.500000 13.750000 1.000000 0.000000 -1
    0 -10.375000 -10.250000 13.750000 1.000000 1.000000 -1
    0 -10.375000 10.500000 13.750000 0.000000 1.000000 -1
    0 10.375000 10.500000 13.750000 1.000000 1.000000 -1
    0 -10.375000 -10.250000 13.750000 0.000000 0.000000 -1
    0 10.375000 -10.250000 13.750000 1.000000 0.000000 -1

    // number of normals
    6

    // normal: x, y, z
    0.000000 0.000000 1.000000
    1.000000 0.000000 0.000000
    0.000000 0.000000 -1.000000
    -1.000000 0.000000 0.000000
    0.000000 1.000000 0.000000
    0.000000 -1.000000 0.000000

    // number of triangles
    12

    // triangle: flags, vertex index1, vertex index2, vertex index3, normal index1, normal index 2, normal index 3, smoothing group
    0 0 1 2 0 0 0 1
    0 1 3 2 0 0 0 1
    0 4 5 6 1 1 1 2
    0 5 7 6 1 1 1 2
    0 8 9 10 2 2 2 1
    0 9 11 10 2 2 2 1
    0 12 13 14 3 3 3 2
    0 13 15 14 3 3 3 2
    0 12 16 6 4 4 4 3
    0 16 17 6 4 4 4 3
    0 18 13 19 5 5 5 3
    0 13 7 19 5 5 5 3

    // number of materials
    Materials: 1

    // material: name
    ''Material01''

    // ambient
    0.200000 0.200000 0.200000 0.800000

    // diffuse
    0.000000 0.501961 0.752941 0.800000

    // specular
    0.752941 0.752941 0.752941 0.800000

    // emissive
    0.000000 0.000000 0.000000 0.800000

    // shininess
    63.000000

    // transparency
    0.800000

    // color map
    ''D:\Eigene Dateien\Image2.tga''

    // alphamap
    ''D:\Eigene Dateien\Image1.tga''

    // number of joints
    Bones: 3

    // name
    ''joint1''

    // parent name
    ''''

    // joint: flags, posx, posy, posz, rotx, roty, rotz
    0 0.250000 0.000000 0.000000 0.224024 1.570796 0.000000

    // number of position keys
    2

    // position key: time, posx, posy, posz
    1.000000 0.000000 0.000000 0.000000
    30.000000 0.000000 0.000000 0.000000

    // number of rotation keys
    2

    // rotation key: time, rotx, roty, rotz
    1.000000 0.000000 0.000000 0.000000
    30.000000 0.000000 0.000000 0.000000

    ''joint2''
    ''joint1''
    5 0.000000 0.000000 20.256172 -1.015218 0.000362 3.141593
    3
    1.000000 0.000000 0.000000 0.000000
    15.000000 0.000000 0.000000 0.000000
    30.000000 0.000000 0.000000 0.000000
    3
    1.000000 0.000000 0.000000 0.000000
    15.000000 2.286381 -0.000548 -0.000365
    30.000000 0.000000 0.000000 0.000000
    ''joint3''
    ''joint2''
    4 0.000000 0.000000 16.128391 0.000000 0.000000 0.000000
    2
    1.000000 0.000000 0.000000 0.000000
    30.000000 0.000000 0.000000 0.000000
    2
    1.000000 0.000000 0.000000 0.000000
    30.000000 0.000000 0.000000 0.000000


    // you can build the joint matrix:
    // - rotate an identity matrix by the rotation values of the joint
    // - set the translation of the matrix to the position values.

    // the same for key matrices

    // the key matrices animate the reference matrices, so you have to multiply them,
    // to get the final local joint matrix. The get the final global joint matrix,
    // you have to multiply them by their parents.

    ''A szíved szabad! Légy bátor és kövesd!''

  • OddMan

    őstag

    válasz BaLinux #35 üzenetére

    Sikerült betöltenem egy modellt és mos textúrázni is akarom.
    A txt file-ban a vertexekhez megvan az u és v textúra koordináta.
    A kérdésem, hogy glTexParameteri()-nél az alábbiak, közöl melyikeket érdemes használni? :U

    - GL_TEXTURE_MIN_FILTER
    - GL_TEXTURE_MAG_FILTER
    - GL_TEXTURE_WRAP_S
    - GL_TEXTURE_WRAP_T

    Később az md2 binárissal is megpróbálkozok majd, csak a txt-t azért sokkal könnyebb volt megérteni. Mármint a belső felépítését. :DDD

    ''A szíved szabad! Légy bátor és kövesd!''

  • OddMan

    őstag

    BaLinux még egy gyors kérdés! Sikerült a textúrát is megjeleníteni a modellen, de egy kicsit furán néz ki. Gondolom, azért van ez, mert a normálvektorokat még be kell állítani. A kérdésem, hogy ezt a ''glNormal3fv'' OpenGL paranccsal kell? :U :F


    [Szerkesztve]

    ''A szíved szabad! Légy bátor és kövesd!''

  • OddMan

    őstag

    válasz OddMan #37 üzenetére

    Belinkelek egy pár képet, így talán könnyebb lesz.

    [kép]

    [kép]

    :)


    [Szerkesztve]

    [Szerkesztve]

    ''A szíved szabad! Légy bátor és kövesd!''

  • OddMan

    őstag

    Ez lenne a textúra:

    [kép]

    [Szerkesztve]

    ''A szíved szabad! Légy bátor és kövesd!''

  • OddMan

    őstag

    válasz BaLinux #41 üzenetére

    Nagyon köszi, hogy segítesz!
    Világítás nincsen bekapcsolva, viszont az u és v koordinátákat nem osztottam le a textúra mérettel, úgyhogy ez lesz az egyik hiba.
    A normálvektorok csak a fényszámításoknál vannak használva, vagy a helyes textúra megjelenítéshez is szükséges? :U
    Az interpolálást hogyan kell kiszámítani? :U Még sosem csináltam ilyet. :B


    [Szerkesztve]

    ''A szíved szabad! Légy bátor és kövesd!''

  • OddMan

    őstag

    Találtam egy jegyzetet a lineáris algebráról.
    Belinkelem ide!

    Bővebben: link

    ''A szíved szabad! Légy bátor és kövesd!''

  • OddMan

    őstag

    válasz BaLinux #44 üzenetére

    Nem akaródzik összejönni nekem normálisan ez a textúrázás!
    Nem lehet, hogy az OpenGL-ben nincsen valami jól beállítva? :U Úgy veszem észre, hogy átlátszó lesz a modell, ha rárakom a textúrát. Már több modellt is próbáltam, és mindegyiknél ugyan az a helyzet: átlátszó a modell, ezért belelátok és látom a textúrát a karakter gyomrában.
    Egyébként nem lehet, hogy az x,y koordinátát már nem kell osztani a textúra szélességével és magasságával, mert az alábbi fájlrészletben látható, hogy nem 1 és 0 a textúra koordináta, hanem már float típusú. Ja és amúgy ha osztok, akkor egyáltalán nem jelenik meg a textúra.
    Meg ha megnézem a textúrát jobban, fentebb már belinkeltem, akkor azt nem kell valahol megadni, hogy az egyes részek hol találhatók? Pl.: a feje a keze mellett van.

    //flag, x, y, z, u, v, bone_index
    0 -6.573679 -20.688145 -35.781826 0.436667 0.917949 -1
    0 -4.196494 -21.671164 -37.849846 0.460000 0.917949 -1
    0 -5.385087 -22.457579 -41.066765 0.460000 0.851282 -1

    [Szerkesztve]

    [Szerkesztve]

    ''A szíved szabad! Légy bátor és kövesd!''

  • OddMan

    őstag

    válasz BaLinux #46 üzenetére

    Hihetetlen, megoldódott a probléma!
    Eredetileg pcx kép volt a textúra, de én átkonvertáltam bmp-re, mert azt könnyebb kezelni.
    Viszont most vettem észre, hogy a feje tetejére is kell állítani és akkor lesz jó. Ez gondolom a bmp felépítése miatt, lehet így.
    Mindegy úgyis akarok írni egy tga beolvasót, mert ott már van alpha byte is (GL_RGBA). :DDD


    [Szerkesztve]

    ''A szíved szabad! Légy bátor és kövesd!''

  • OddMan

    őstag

    Azt nem tudod, hogyan kell átadni a gluBuild2DMipmaps függvénynek olyan képet, ami csak 8bit-es, tehát 256 színű? Az ilyen fájlokban indexek vannak tárolva, ami rámutat a megfelelő színre. :U

    ''A szíved szabad! Légy bátor és kövesd!''

  • OddMan

    őstag

    válasz GBX #50 üzenetére

    Köszi GBX!


    Az english is megy, van origo alap C nyelvvizsgám, de a középfok még messze van és ezért eléggé lassan megy az olvasás/értés.



    [Szerkesztve]

    ''A szíved szabad! Légy bátor és kövesd!''

  • OddMan

    őstag

    válasz GBX #54 üzenetére

    Köszke! :R


    Na akkor hétvégén le is húzom. :DDD

    ''A szíved szabad! Légy bátor és kövesd!''

  • OddMan

    őstag

    válasz BaLinux #57 üzenetére

    Eleszek ezzel egy darabig, amíg átnyálzom.
    No meg sikerült megírni a TGALoader progimat is, ami 8 és 24bit-es tga fájlokat tud beolvasni.
    Most az animálással akarok egy kicsit majd foglalkozni. A half-life játékból átalakítottam egy animált modellt Milkshape 3D ASCII formátumba és ezt akarom majd a saját progimban felhasználni csak a gyakorlás kedvéért.


    Mondjuk most, hogy megjött a meleg igen csak akadozva fog haladni a projekt.
    Munka és suli után inkább a szabadban vagyok a haverokkal, mint egy sötét szobában püföljem a billentyűket. :DDD



    [Szerkesztve]

    ''A szíved szabad! Légy bátor és kövesd!''

Aktív témák