Wavefront .obj generálás C++ -ban

Wavefront .obj generálás C++ -ban
2013-10-20T22:43:24+02:00
2013-10-23T14:27:29+02:00
2022-10-15T22:26:02+02:00
dragostej
Üdv!
A következő dologban szeretnék ötleteket, segítséget kérni. Adott egy .off kiterjesztésű fájlban egy model mesh, melyet C++ -ban, CGAL és OpenGL segítségével dolgozok fel. Kérdésem az, hogy, ha adott a mesh-hez tartozó textúra, egy kép fájlban, akkor implementálható-e valahogy az, hogy kiexportáljuk egy szabványos .obj fájlba a mesh -t a textúrájával együtt.
Mutasd a teljes hozzászólást!

  • tudtommal az .obj-be csak a geometria "kerülhet bele", és talán csak polymesh, azaz arra van lehetőséged, hogy a csúcspontokhoz az uv-kat is kiírd, meg persze a "material" adatokat is írhatsz bele, de magát a textúra(kat) fájlt nem tudod "becsomagolni", az(ok) csak külön fájl(ok)ba kerülhet(nek), szerintem, vagy mi is a kérdés pontosan?
    Mutasd a teljes hozzászólást!
  • A kérdés az, hogy implementálható-e az, hogy egy szabványos obj generáljak a meshből és a texturából. És, ha igen, akkor hogyan.
    Mutasd a teljes hozzászólást!
  • Igen, megoldható, hogy egy saját belső mesh ábrázolásból kiirj egy obj fájlt.
    Nem kell hozzá semmi különleges tudás, átnézed az obj formátumot (link), meg ha még nincs meg, akkor c++-ból fájlba irás kell (link).
    Kettő fájlt kell irnod, egyik maga az obj, ami a mesh adatokat fogja tartalmazni (vertexek, textcoordok, tri/quad indexek), a másik pedig a material fájl (amire a obj fájlban levő face-ek hivatkoznak). Ebbe a material fájlba fogod beirni, hogy a diffuse textúrának mi a fájlneve.
    Nem kell minden adatot kiirnod az obj fájlba, csak amik neked megvannak (pl. "vp"-t sosem irtam, textúra paraméterekből sem kell kötelezően mindnek ott lenni a fájlban, csak opcionálisak)
    Ennyi, ez szabványos obj lesz. Igazából pl. irhatsz be saját tag-eket is, a legtöbb beolvasó ezen át fog lépni hiba nélkül. (pl. én irtam már extra vertex és material adatokat obj fájlba, és ettől ugyanúgy be tudta tölteni blender, persze az extra adataim nélkül)
    Mutasd a teljes hozzászólást!
  • Igen, azt sejtettem, hogy magát a fájlt létre tudom hozni a szabványnak megfelelően. Itt azon lenne a hangsúly, hogy az adatokat hogyan számítom ki bele. Tehát, hogy van-e valami legjobb módszer, vagy példa implementáció arra, hogy a textúra kord-okat, hogyan számolom ki a meshből és a hozzátartozó képből, illetve ezt a materiál fájlt.
    Mutasd a teljes hozzászólást!
  • A textúra koordinátáknak ugyanannak kellene lennie, mint ami a forrás fájlban volt. Gondolom változatlanul veszed át a textúrát is...
    Mutasd a teljes hozzászólást!
  • Nem, a textúrázás még nem történt meg, csak meg a .jpeg, vagy .bmp kiterjesztésű fájlom van meg, ezt szeretném majd ráhúzni a modellre.
    Mutasd a teljes hozzászólást!
  • Pont ez a problémája, hogy az .off fájlformátumban nincs texture információ, csak geometria és a face-k színei. Gondolom valami algoritmust szeretne amivel be tudja texturázni a mesh-t automatikusan, programon belül megadott sarokpontokból kiindulva majd menteni .obj-ba.

    Ha csak a mesh kellene texturázva, akkor a legegyszerűbb megoldás a kézi módszer. A kérdező a programjából átkonvertálja az .off geometriáját .obj-ba, egy akármilyen 3d szerkesztőbe beimportálja, betexturázza, majd exportálja .obj-ba a material .mat fájl-al együtt. Aztán mehet is OpenGL-be. Bár ha játék a cél, akkor inkább egy .3ds library, mert az .obj-ban nincs animáció.
    Mutasd a teljes hozzászólást!
  • Akkor hogy van meg a textúra?
    Vagy nagyon egyszerű az a textúra (akkor minek a koordináták), vagy nem értem.

    Egy összetettebb modell textúrája ha megvan, akkor valahol meg kell lennie a koordinátáknak is, minden textúra editálásból kiesik a textúrával együtt.
    Mutasd a teljes hozzászólást!
  • Így van kedves Gaunt, pontosan ezt szeretném amit mondasz. Kérdés az hogy ez megvalósítható-e valahogy, vagy nagyon esélytelen.
    Mutasd a teljes hozzászólást!
  • Akkor hogy konkrétak legyünk, van egy mesh-em egy emberi fejről. És van hozzá egy ilyen képem, textúrám. És a kérdés, implementálhetó-e az, hogy a modellre ráhúzzam ezt a textúrát és kiexportáljam .obj - be.
    Mutasd a teljes hozzászólást!
  • Ha jól értem van egy meshed és van máshonnan egy textúrád, és ezt akarod ráhúzni. Ehhez valakinek meg kell a koordinátákat szülni.

    Pl:
    http://preview.turbosquid.com/Preview/2012/04/10__14_25_28/spar2row1..
    textura:
    http://preview.turbosquid.com/Preview/2012/04/10__14_25_28/chiti_tex..

    Ez nem egy olyan, hogy van 1 képlet, meg egy jpeg, és kiadja a koordinátákat.


    Az út az, amit Gaunt mondott. Az érdekessége, hogy a linkelt képhez is megvannak ezek a koordináták, maximum nincs a birtokodban.

    Elnézést, ez nekem nem jött le, mert a gyakorlatban nem így készülnek a 3D-s modellek, nincs olyan hogy megvan a test és a textúra, de nincsenek hozzá koordináták.
    Mutasd a teljes hozzászólást!
  • Nem, nem, valószínűleg én nem vagyok benne a témában annyira, mint kellene. Szóval ha jól értem ez így nem igazán oldható meg, hanem marad helyette pl: egy Blender.
    Mutasd a teljes hozzászólást!
  • megoldható saját programmal is, attól függően, hogy mik a peremfeltételek,

    kulcsszó: UV mapping

    lehet próbálkozni "automatizmusokkal": planar, spherical, cube mapping-gel, de a te esetedben ezek szerintem nem játszanak, jobban jársz, ha kézzel csinálod meg mondjuk a már említett Blender-ben, ahogyan más is javasolta, mert egyébként is a te esetedben ezt általában fordítva szokás, azaz az UV set-re festeni a textúrát (nyilván van az az irány is, amit te szeretnél, amikor létező bitmap-et kell "ráfeszíteni" a geometriára), próbálkozhatsz persze azzal is, hogy írsz egy primitív UV editort,

    szerintem,
    Mutasd a teljes hozzászólást!
  • nyilván van az az irány is, amit te szeretnél, amikor létező bitmap-et kell "ráfeszíteni" a geometriára


    És ez az irány mennyire járható, vagy van-e valamilyen bővebb info erről?
    Mutasd a teljes hozzászólást!
  • abban az esetben szokás az UV-ket "tologatni" stb., ill a már említett "projekciós" technikákat használni, (ez utóbbiak persze csak "Közelítő/durva" megoldást adnak, azaz általában csak kiindulópontnak használatosak),

    közben eszembe jutott: ha nem vagy nagyon akkurátus, akkor lehet, hogy mégiscsak "érdemes" kódot írnod rá, azaz egy egyszerű spherical mapping-et kipróbálnod, ha mint feladat érdekel, de szerintem a már említett Blenderben sokkal hamarabb "feluvézhatod" "kézzel"...

    infot meg rengeteget találhatsz, ha a már említett kulcsszó (UV mapping) után keresel, meg ilyenekt nézel: automatic texture mapping, hasonlók...

    szerintem,
    Mutasd a teljes hozzászólást!
  • Közben egy kis kutatás után, sikerült találnom egy ilyen megoldást , de semmiféle implementációt nem találok róla, ennyi infoval meg nehéz lenne számomra alkalmazni. Ti tudtok erről valamit bővebben?
    Mutasd a teljes hozzászólást!
  • Érdekesnek tűnik. Control pontokat pontosan illeszti, a többit pedig valamilyen interpoláció segítságével ráhúzza.

    Érdekes lehet egy ilyet implementálni. Lenne időm, vagy ha nagyon unatkozom egyszer lehet kipróbálom :D

    Szerintem csak lehet találni készen is ilyesmit!!
    Ez sem űrtudomány. Emlékszem még valamelyik régebbi játékba is volt beépítve ilyen lehetőség. Ilyen kontrolpontok alapján rálehetett húzni saját fényképről az arcot a virtuális játékosra.
    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd