[Grafika] [WebTip] [Fotografování] [Galerie] [MujMac] [Printing]
  Redakce: info (at) builder.cz   Inzerce: reklama (at) grafika.cz
Diskuzní fóra
.Net (68468)
ASP (1591)
ActiveX (168)
Allegro (136)
Assembler (3926)
C++ Builder (23160)
C/C++ (44499)
Databáze (30680)
Delphi (78806)
DelphiX (1655)
DirectX (1464)
Java (39508)
JavaScript (12598)
Matematické programy (2178)
OOP a UML (732)
OpenGL (6920)
Php (65224)
PowerBuilder (464)
Problémy a algoritmy (10473)
Programování v Linuxu (2000)
Právo a programování (3384)
Python (1353)
Ruby (136)
Visual Basic (12078)
Visual C++ (12956)
Wap (56)
Web (10895)
Web servery (5549)
Win32 (13553)
Windows CE (865)
XML/XSL (1860)
Textová inzerce
Služby Builder.cz
  • Bazar - koupím(0)
  • Bazar - prodám(0)
  • Hledám práci(0)
  • Nabízíme práci(0)
  • Projekty(0)
  • OpenGL -10.díl Náčítání modelů ze souborů
    Po dlouhé době přicházíme s dalším dílem seriálu. Tentokrát se budeme věnovat načítání modelů ze souborů ASE. Půjde o seznámení s jednoduchým ASCII formátem, do kterého můžete z 3D MAXU exportovat své modely.
    OpenGL
    Předchozí díl: OpenGL 9. díl - Bitmap Font

    Obsah článku

    - Teorie
    - Programování
    Autor: Michal Svoboda
    Rubrika: C/C++
    Publikováno: 05.09. 2002
     Tisk článku
    Poslat odkaz emailem
     

    Po dlouhé době přicházím s dalším dílem seriálu, který jsem napsal při dlouhém prázdninovém nicnedělání. Budeme se věnovat načítání modelů ze souborů ASE. Půjde o seznámení s jednoduchým ASCII formátem, do kterého můžete z 3D MAXU exportovat své modely. Připravte se, nebude to žádná sranda, ale tvrdá programátorská řehole. Výsledek ale bude stát za to.

    Modely můžeme ukládat do nejrůznějších formátů. Mezi nejčastější formáty patří DXF (původně jsem zamýšlel tento článek napsat o něm), 3DS (bude popsán v některém dalším díle), MAX, DWG, ASE atd. Formáty rozdělujeme podle toho, jestli jsou data zapisovány binárně nebo textově.

    Pro tento článek jsem vybral ASCII formát ASE, který vyexportujeme v programu 3D Max. Tento formát není nic moc, ale nějak začít musíme. Ale pro nás má jednu velkou přednost, jednoduchost. Nevýhodou naopak je pomalost zpracování textového souboru.

    Napišme si třídu, která bude ASE soubory načítat. Tuto třídu pojmenujeme TASEFile. Do této třídy budeme natahovat informace o počtech objektů, počtech materiálů, ukazatel na stream, pak budeme potřebovat data jednotlivých objektů a data materiálů.

    Popišme si nejdříve jak jsou data v souboru organizována. Vysvětluje to následující obrázek:

    Při načítání si nejdříve zjistíme základní informace, jako je počet objektů, počet materiálů atd. Potom načteme materiály. Každý materiál je reprezentován barvou a popřípadě i texturou (velmi zjednodušeně řečeno). Celá scéna se skládá z jednoho nebo více objektů. Proto se dáme do načítání jednotlivých objektů. Každý objekt má definované umístění a pootočení (neuvažoval jsem je). Pro každý objekt načteme všechny vrcholy objektu (VERTEX). Potom načteme, jakým způsobem tyto vrcholy pospojovat (FACE). Pokud je objekt potexturován načteme navíc vrcholy pro texturu TVERTEX a pro namapování potřebujeme také TFACE. Navíc ještě můžeme ze souboru načíst nebo vypočíst normály, aby objekt vypadal reálněji ve světle. Pokud jste ještě nepochopili, co jsou vertexy a face, podívejte se na následující obrázek:

    Pro dokonalé pospojování všech vrcholů nám postačí spojovat vrcholy po 3 bodech (například A,B,F atd).

    Udělejme si ještě krátký výlet do souboru ASE, ať si můžeme představit co máme před sebou:

    *3DSMAX_ASCIIEXPORT 200  
     *COMMENT "AsciiExport Version 2,00 - Sun Feb 03 12:56:39 2002"
    *SCENE {
    *SCENE_FILENAME "lod01-finsh.max" *SCENE_FIRSTFRAME 0 *SCENE_LASTFRAME 100 *SCENE_FRAMESPEED 30 *SCENE_TICKSPERFRAME 160 *SCENE_BACKGROUND_STATIC 0.0000000000 0.0000000000 0.0000000000 - barva podkladu *SCENE_AMBIENT_STATIC 0.0431400016 0.0431400016 0.0431400016 } *MATERIAL_LIST { - seznam materiálů a submateriálů a jejich vlastnosti . . . . . . . atd. . . . . . . . . . . . . } *GEOMOBJECT { - popis jednoho objektu . . . . . . . atd. . . . . . . . . . . . . } *MESH { *TIMEVALUE 0 *MESH_NUMVERTEX 8 - počet vertexů objektu *MESH_NUMFACES 12 - počet face objektu *MESH_VERTEX_LIST { *MESH_VERTEX 0 -0.1468413621 1.2552357912 -0.3109439015 - takhle vypadá popis jednoho vertexu vrcholu - co jednotlivé čísla znamenají zleva: pořadové číslo, souřadnice x, y, z . . . . . . . . . . . . . . . . . . . } *MESH_FACE_LIST { *MESH_FACE 0: A: 0 B: 2 C: 3 AB: 1 BC: 1 CA: 0 *MESH_SMOOTHING 2 *MESH_MTLID 1 - popis FACE - opět první číslo je pořadové číslo, dále nás zajímají hodnoty u A, B a C - říká které vertexy se mají spojit, čísla za A,B, C jsou pořadové čísla vertexů . . . . . . . . . . . . . . . . . . . } *MESH_NUMTVERTEX 0 - počet texturových vertexů je 0, takže bez textury *PROP_MOTIONBLUR 0 *PROP_CASTSHADOW 1 *PROP_RECVSHADOW 1 *WIREFRAME_COLOR 1.0000000000 0.6627451181 0.0000000000 }

    To je vystřižená jen malá část ASE souboru a našim úkolem je správně využít data, která se nám tu povalují. Komentář uvnitř rámečku je natolik bohatý, že není třeba dál jednotlivé řádky rozebírat. A jakým způsobem budeme data načítat se dozvíte v další části článku.


     Následující kapitola (Programování) >> 


    Zpět na začátek stránky

    Autor: Michal Svoboda
    Klikni pro další články autora

    Hodnocení článku
    1 | 2 | 3 | 4 | 5
    Aktuální známka: 2.73
    (Počet známek: 3242)

    Komentáře k článku
    dr.eamer22.10.18:39jsemamlas
    Michal Svoboda24.10.8:19RE: jsemamlas
    GereG05.04.20:43kterej MAX
    zitmen28.05.20:16RE: kterej MAX
    JSH24.06.21:50Chyby v ASE
    Mem06.09.19:42Ad face
    Michal Svoboda07.09.0:03RE: Ad face
         





    info@builder.cz
    Vydává Grafika Publishing, s.r.o.
    Copyright (c) 1997-2002 Všechna práva vyhrazena