Informatika | Információelmélet » Információ megjelenítés, VRML

Alapadatok

Év, oldalszám:2009, 82 oldal

Nyelv:magyar

Letöltések száma:103

Feltöltve:2010. február 14.

Méret:234 KB

Intézmény:
-

Megjegyzés:

Csatolmány:-

Letöltés PDF-ben:Kérlek jelentkezz be!



Értékelések

Nincs még értékelés. Legyél Te az első!


Tartalmi kivonat

Információ megjelenítés VRML Dr. Iványi Péter Fejlődés • 3D grafika fejlődése – OpenGL fejlődés • nem specifikál file formátumot • Internet „boom” – HTML fejlődése • VRML (Virtual Reality Modeling Language) Szabványosított • • • • (Open Inventor, SGI) VRML1 (1994 Nov) VRML2, VRML97 (ISO/IEC 14772-1:1997) X3D (ISO/IEC 19775-1) • Web3D Consortium: www.web3dorg – ISO, MPEG, W3C testületekkel együtt dolgozik Formátum • Szöveg file (text file) • Web böngésző is be tudja tölteni • Nem igazán „nyelv” (language) – Programozási nyelv: JAVA, JavaScript (ECMAScript) • Világ (world) – Ma már interaktív • Kiterjesztés: wrl Programok • Web böngésző: Internet Explorer • VRML plug-in – Cortona • Modellezés – Modellező – Szövegszerkesztő Szövegszerkesztő vs. modellező • Szövegszerkesztő: – Nem kell új szoftware, minden VRML lehetőség kihasználható – Nehéz

bonyolult modelt készíteni, VRML formátumot ismerni kell • Modellező: – Egyszerű „rajzolni”, nem kell ismerni a VRML formátumot – Lehet hogy nem minden VRML komponens használható, nem biztos hogy hatékony világ lesz VRML 1, file szerkezete • Fejléc • A világ – Csomópontokból (objektumokból) áll – Mezők és értékek • Megjegyzések • Kis- és nagybetű fontos!!! • Space, TAB, Enter-ek száma nem számít Példa, t1.wrl #VRML V1.0 ascii Separator { Material { diffuseColor 1 0 0 } Sphere { radius 2.3 } } Fejléc • Kötelező, mindig ugyanaz #VRML V1.0 ascii – #VRML VRML file – V1.0 VRML 1.0-ás verzió – ascii text file Megjegyzések • ‘#’ jeltől a sor végéig tart • A program nem veszi figyelembe • Például: # piros szin Material { diffuseColor 1 0 0 } Egy csomópont • Objektumot ír le – Alakzat, fényforrás, stb. • Minden csomópontnak van: – Típusa – Kapcsos zárójelek – Zérus vagy

több mező a kapcsos zárójeleken belül • Objektum tulajdonságait írja le • Példa: Sphere { radius 2.3 } Mező • Minden mezőnek van: – Neve – Típusa (float ,int, etc) – Alapérték • A mezők opciónálisak • Bármilyen sorrendben megadhatók • Ha a mező nincs megadva, akkor az alapérték érvényes Primitív alakzatok • A világ alapkövei – – – – Doboz: Box Kúp: Cone Henger: Cylinder Gömb: Sphere • Az alakzat méreteit lehet megadni Doboz Cube { width 2 height 2 depth 2 } Kúp Cone { height 2.0 bottomRadius 1.0 } Henger Cylinder { height 2.0 radius 1.0 } Gömb Sphere { radius 1.0 } Alakzatok • Az alakzatokat a világ közepén helyezzük el • Egy VRML file több alakzatot is tartalmazhat • Ha az alakzatok egy pozícióban vannak, akkor átfedik egymást Példa, t2.wrl #VRML V1.0 ascii Separator { Sphere { radius 0.7 } Cube { width 1.0 height 1.0 depth 1.0 } } VRML csoportok • A VRML file csak

egy csomópontot tartalmazhat • Lehet a csomópontokat – Csoportosítani – Egymásba ágyazni • A csomópontok hierarchikusan épülnek fel – Scene Graph Separator, Switch, WWWAnchor, LOD Csoportok 1., t3wrl #VRML V1.0 ascii Separator { Separator { Sphere { radius 0.7 } } Separator { Cube { width 1.0 height 10 depth } } 1.0 } Csoportok 2. #VRML V1.0 ascii Separator { Separator { Sphere { radius 0.7 } Cube { width 1.0 height 10 depth } } 1.0 } Koordinátarendszer • Jobb kéz szabály • Az alakzatokat a világ közepén helyezi el alapesetben • Világ koordinátarendszer, mint OpenGL – negatív Z irányba nézünk Transzformációk • Előző koordinátarendszerhez képest • Első lépésben a világ koordinátarendszerből indulunk ki • Eltolás • Elforgatás • Nagyítás/kicsinyítés Eltolás Translation { translation x y z } Elforgatás • Elforgatás egy tengely körül • A szöget radiánban kell megadni Rotation { rotation x

y z rad} Tengely X Y Z x, y, z értékek 1.0 00 00 0.0 10 00 0.0 00 10 Pozitív forgatás Nagyítás, kicsinyítés • Lehet egyenletes vagy különböző mértékű Scale { scaleFactor x y z } Összetett transzformáció Transform { translation T1 rotation R1 scaleFactor S scaleOrientation R2 center T2 } Translation { translation T1 } Translation { translation T2 } Rotation { rotation R1 } Rotation { rotation R2 } Scale { scaleFactor S } Rotation { rotation -R2 } Translation { translation -T2 } Mátrix • Közvetlenül mátrix-al is meg lehet adni MatrixTransform { matrix 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 } Példa, t4.wrl #VRML V1.0 ascii Separator { # bal oszlop Separator { Translation { translation -2.0 30 00 } Cylinder { radius 0.3 height 60 } } # jobb oszlop Separator { Translation { translation 2.0 30 00 } Cylinder { radius 0.3 height 60 } } # vizszintes gerenda Separator { Translation { translation 0.0 605 00 } Cube { width 4.6 height 04 depth 06 } } }

Csoportok • A Separator csomópont – nyitó kapcsos zárójel = Minden állapotot elment • glPushMatrix – záró kapcsos zárójel = Minden állapotot visszállít • glPopMatrix Példa, t5.wrl #VRML V1.0 ascii Separator { # bal oszlop Translation { translation -2.0 30 00 } Cylinder { radius 0.3 height 60 } # jobb oszlop Translation { translation 2.0 30 00 } Cylinder { radius 0.3 height 60 } # vizszintes gerenda Translation { translation 0.0 605 00 } Cube { width 4.6 height 04 depth 06 } } Megjelenítés • Definíció mint OpenGL-ben • „Addig érvényes amíg meg nem változtatjuk” Anyag jellemző • 0.2-es intenzitású ambiens fehér fényt feltételezünk mindig Material { ambientColor 0.2 02 02 diffuseColor 0.8 08 08 specularColor 0 0 0 emissiveColor 0 0 0 shininess 0.2 transparency 0 # 0-1 } Anyag jellemző • Mindegyik anyagjellemző lehet vektor is !!! • Vektor – szögletes zárójelek között – Komponenseket vesszővel kell

elválasztani • Példa – transparency 0 – transparency [ 0 ] – transparency [ 0, 0.1, 02, 03 ] Példa, t7.wrl #VRML V1.0 ascii Separator { Material { diffuseColor 1.0 00 00 } # voros Cube { width 2.86 height 04 depth 06 } Translation { translation 0.0 10 00 } Material { diffuseColor 1.0 05 00 } # narancs Cube { width 2.86 height 04 depth 06 } Translation { translation 0.0 10 00 } Material { diffuseColor 1.0 10 00 } # sarga Cube { width 2.86 height 04 depth 06 } Translation { translation 0.0 10 00 } Material { diffuseColor 0.4 10 00 } # vilagos zold Cube { width 2.86 height 04 depth 06 } Translation { translation 0.0 10 00 } Material { diffuseColor 0.0 10 00 } # zold Cube { width 2.86 height 04 depth 06 } Translation { translation 0.0 10 00 } Material { diffuseColor 0.0 05 10 } # vilagos kek Cube { width 2.86 height 04 depth 06 } Translation { translation 0.0 10 00 } Material { diffuseColor 0.0 00 10 } # kek Cube { width 2.86 height 04 depth 06 } } Példa, anyag.wrl

Aluminium Réz Arany Vörös fém Kék műanyag Pontok, vonalak, felületek • Komplex felületeket nehéz primitív alakzatokból felépíteni – – – – – Terep Állat Növény Szerkezet Stb Pontok, vonalak, felületek • Pontok – Koordinátákkal adunk meg az aktuális koordinátarendszerben – Transzformációk itt is érvényesek • Másik csomópont adja meg, hogyan kell összekötni őket Koordináták • Csak koordinátákat jelöl ki, nincs látható hatása • Koordináták vektora – Csak a Z koordináta után kell vessző !!! Coordinate3 { point [ x1 y1 z1, x2 y2 z2, . ] } Pontok • Kezdő indextől (startIndex) numPoints-nyi koordinátát használ a pontokhoz • Ha numPoints értéke –1: minden további koordináta legyen pont • Aktuális tulajdonságokat átveszi PointSet { startIndex 0 numPoints –1 } Példa, t8.wrl #VRML V1.0 ascii Separator { Coordinate3 { point [ 0 0 0, 1 1 1, 2 2 2, 3 3 3 ] } Material { emissiveColor

1.0 00 00 } PointSet { startIndex 0 numPoints -1 } } Vonalak • Coordinate3 által megadott koordinátákat használja • Folytonos vonallánc is megadható, lezárása –1 IndexedLineSet { coordIndex 0 materialIndex –1 normalIndex –1 textureCoordIndex –1 } Vonalak IndexedLineSet { coordIndex [ 0, 1, 2, 3, -1 ] } IndexedLineSet { coordIndex [ 0, 1, -1, 2, 3, -1 ] } Példa #VRML V1.0 ascii Separator { Coordinate3 { point [ 0.0 00 00, 1.0 10 00, 2.0 10 00, 3.0 00 00 ] } Material { emissiveColor 1.0 00 00 } IndexedLineSet { coordIndex [ 0, 1, 2, 3, -1 ] } } Felület • Hasonló a vonalhoz • -1 választja el a felületeket IndexedFaceSet { coordIndex 0 materialIndex -1 normalIndex -1 textureCoordIndex –1 } Felület • Egy háromszög (file részlet) IndexedFaceSet { coordIndex [ 0, 1, 2, -1 ] } • Két háromszög (file részlet) IndexedFaceSet { coordIndex [ 0, 1, 2, -1, 0, 2, 3, -1 ] } Normálisok • Felületi normálisok Normal { vector [ ] }

Normálisok hozzárendelése NormalBinding { value DEFAULT} – – – – – – – – DEFAULT OVERALL PER PART PER PART INDEXED PER FACE PER FACE INDEXED PER VERTEX PER VERTEX INDEXED Anyagok hozzárendelése MaterialBinding { value DEFAULT} – – – – – – – – DEFAULT OVERALL PER PART PER PART INDEXED PER FACE PER FACE INDEXED PER VERTEX PER VERTEX INDEXED Példa, t10.wrl #VRML V1.0 ascii Separator { Coordinate3 { point [ 0.0 00 00, 1.0 00 00, 0.0 10 00, 1.0 10 00 ] } Material { diffuseColor 1.0 00 00 } IndexedFaceSet { coordIndex [ 0, 1, 3, 2, -1 ] } } Példa, t11.wrl #VRML V1.0 ascii Separator { Coordinate3 { point [ 0.0 00 00, 1.0 00 00, 0.0 10 00, 1.0 10 00 ] } Material { diffuseColor [ 1.0 00 00, 00 10 00 ] } MaterialBinding { value PER FACE } IndexedFaceSet { coordIndex [ 0, 1, 2, -1, 1, 3, 2, -1 ] } } Példa, t12.wrl #VRML V1.0 ascii Separator { Coordinate3 { point [ 0.0 00 00, 1.0 00 00, 0.0 10 00, 1.0 10 00 ] } Material { diffuseColor [

1.0 00 00, 00 10 00, 0.0 00 10, 10 00 10 ] } MaterialBinding { value PER VERTEX } IndexedFaceSet { coordIndex [ 0, 1, 2, -1, 1, 3, 2, -1 ] } } Példa, t13.wrl #VRML V1.0 ascii Separator { Material { diffuseColor [ 1.0 00 00 ] } Coordinate3 { point [ 0.0 00 00, 00 10 00, 1.0 00 00, 10 10 00, 1.0 00 10, 10 10 10 ] } Normal { vector [ 0.000 0 -1000, 0000 0.707 0 -0707, 0707 1.000 0 0000, 1000 } IndexedFaceSet { coordIndex [ 0, 1, 3, 2, 4, -1 ] } } 0 -1.000, 0 -0.707, 0 0.000 ] -1, 2, 3, 5, Példa, t13.wrl Oldalankénti normális Pontonkénti normális Felület információ • A felületről segéd információt adunk a megjelenítő rendszernek  optimalizált megjelenítés • Például – Convex-e – Zárt-e – Síma felületü-e Felület információ ShapeHints { vertexOrdering UNKNOWN ORDERING shapeType UNKNOWN SHAPE TYPE faceType CONVEX creaseAngle 0.5 } Felület információ • vertexOrdering : pontok sorrendje – UNKNOWN ORDERING : ismeretlen –

CLOCKWISE : óramutató járásával egyező – COUNTERCLOCKWISE : óramutató járásával ellentétes • shapeType : objektum alakja – UNKNOWN SHAPE TYPE : ismeretlen – SOLID : zárt • faceType : oldal jellemző – UNKNOWN FACE TYPE : ismeretlen – CONVEX : konvex Felület információ • creaseAngle: szög határérték két oldal között – Ha az oldalak szöge >= adott érték akkor nincs interpoláció – Ha az oldalak szöge < adott érték akkor interpolálja a megjelenítést y x Példa, t13b.wrl #VRML V1.0 ascii Separator { ShapeHints { creaseAngle 3.14 } Material { diffuseColor [ 1.0 00 00 ] } Coordinate3 { point [ 0.0 00 00, 00 10 00, 1.0 00 00, 10 10 00, 1.0 00 10, 10 10 10 ] } IndexedFaceSet { coordIndex [ 0, 1, 3, 2, -1, 2, 3, 5, 4, -1 ] } } Példa, t13b.wrl creaseAngle=0.0 creaseAngle=3.14 Szöveg objektum • Szöveg megjelenítése a világban • Origóba teszi a szöveget AsciiText { string "" # maga szöveg spacing 1

# sorok közötti távolság justification LEFT # LEFT, RIGHT, CENTER width 0 } Példa, t14.wrl #VRML V1.0 ascii Separator { Sphere { radius 0.7 } Translation { translation 0.0 20 00 } AsciiText { string "Gomb" } } Szöveg stílus FontStyle { size 10 family SERIF style NONE # NONE, BOLD, ITALIC } • Family – SERIF: Times-Roman – SANS: Helvetica – TYPEWRITER: Courier Példa, t15.wrl #VRML V1.0 ascii Separator { Sphere { radius 0.7 } Translation { translation 0.0 20 00 } FontStyle { size 0.5 family TYPEWRITER } AsciiText { string [ "Ez egy ", "Gomb" ] } } Fényforrás, pontszerű • Minden irányban azonos módon világít PointLight { on TRUE intensity 1 # [0-1] color 1 1 1 location 0 0 1 } Példa, t16.wrl • Pontosan középen van a fényforrás • Lokális megvilágítási modell!!! – A gömböknek ki kellene takarni a fényt Fényforrás, irányított • Valamilyen adott irányban világítja meg a felületeket

DirectionalLight { on TRUE intensity 1 color 1 1 1 direction 0 0 –1 } Példa, t17.wrl Fényforrás, reflektor • Adott pozícióból, adott irányba világít SpotLight { on TRUE intensity 1 color 1 1 1 location 0 0 1 direction 0 0 -1 dropOffRate 0 cutOffAngle 0.785 } # # # # pozíció irány elhalás mértéke megvilágítási kúp szöge Példa, t18.wrl Ortografikus kamera • Alapesetben a pozíciója: 0,0,1 • Nézési irány: negatív Z irány • Felfelé: Pozitív y irány • A néző kezdeti pozícióját adja – Lehet navigálni a böngészőben • Transzformációk hatnak rá (csak amit előtte adtunk ki) Ortografikus kamera OrthographicCamera { position 0 0 1 # pozíció orientation 0 0 1 0 # elforgatás # fokusz pont távolsága a kamerától focalDistance 5 height 2 } Példa, t19.wrl #VRML V1.0 ascii Separator { OrthographicCamera { position 0 0 10 orientation 0 0 1 3.14 } Sphere { radius 0.7 } Translation { translation 0.0 20 00 }

AsciiText { string "Gomb" } } Perspektív kamera • A végtelenben eltűnnek az objektumok PerspectiveCamera { position 0 0 1 orientation 0 0 1 0 focalDistance 5 heightAngle 0.785398 } Információ, nem megjegyzés • A megjegyzéseket a program eldobja, mentés után elvesznek • Információ a modellről, készítőről, stb Info { string "<Undefined info>" } Objektum nevek • Objektumokat el lehet nevezni és újra felhasználni • Definíció DEF név csomópont • Felhasználás USE név • Példa: – DEF gomb Sphere { radius 1.2 } – USE gomb Példa, t20.wrl #VRML V1.0 ascii Separator { PointLight { location 4.5 45 0 color 10 00 00 } DEF gombok Separator { Sphere { radius 1.0 } Translation { translation 3.0 00 00 } Sphere { radius 1.0 } Translation { translation 3.0 00 00 } Sphere { radius 1.0 } Translation { translation 3.0 00 00 } Sphere { radius 1.0 } } Translation { translation 0.0 30 00 } USE gombok Translation {

translation 0.0 30 00 } USE gombok Translation { translation 0.0 30 00 } USE gombok } Másik példa Ami kimaradt • • • • • Textúrák Switch: Csomópontok közötti váltás WWWAnchor: Átlépés másik világba WWWInline: másik világ beillesztése LOD (Level Of Detail) VRML 97 és tovább (X3D) • • • • • • • Kihúzás Hang Környezet: háttér, köd Navigáció Szenzorok, érzékelés Programozás, Java, JavaScript Kiterjesztések