Extension of room visualization Karel POCHOP ([email protected])
Transkript
Extension of room visualization Karel POCHOP ([email protected]) LS 2007 Úvod 3D vizualizace objektu v místnosti – návaznost na projekt CHIL (Computers in the Human Interaction Loop) a studentský projekt „Vizualizace místnosti v 3D“. Seznámení se s aplikací SitCom vyvinutou firmou IBM v rámci projektu CHIL a se stávajícím modulem 3D vizualizace implementovaném v Java 3D API od firmy Sun Doplnění dalších grafických prvku do stávající verze: podpora zobrazení činnosti/polohy postavy, například postava pracující na počítači, postava píšící na tabuli, nezávislý pohyb hlavy ... rozšíření o další postavy (postava ženy) ovládání pohybu postav pomocí kostry použití textur v 3D modelech další vybavení místnosti, například kamery, mikrofony, zobrazení projekce z video projektoru Návrh a implementace modelu přirozené 3D vizualizace i v případe neúplných nebo kolidujících vstupních dat, tj. „fyzikálního modelu“ pro přirozený pohyb člověka. Implementujte rozšíření modulu 3D vizualizace místnosti v aplikaci SitCom (jazyk Java s využitím Java 3D). Návaznost na úspěšný studentský projekt „Vizualizace místnosti v 3D“. Navrhnete a implementujte model pro přirozený pohyb člověka v 3D i v případe neúplných nebo kolidujících vstupních dat. Doplňte další postavy (postava ženy, dítěte, staršího člověka) a navrhnete rozhraní pro ovládání pohybu postav, např. pomocí kostry. uprava původních objektů: otvory v pokoji, nastavování velikosti objektů, úprava vzhledu člověka vytvořit metody pro práci s dynamickými texturami a billboardy vytvořit metodu pro načítání dynamických objektů implementovat třídu pro načítání avatarů a řízení animací vytvořit několik lidských prototypů Model K popsání animace humanoida se mohou použít dva postupy. V prvním se animace a model postavy vytvořený v grafickém editoru uloží do samostatných souborů resp. do jednoho souboru , ve kterém jsou sekvence odděleny. A ve výsledném programu je nutné načist postupně a nebo na jednou všechny sekvence této animce. Nevhodnost je ve výrazných paměťových požadavcích, v nutnosti zachovat stejný matematický popis animace pro všechny modely a v přílišné specifičnosti na konkrétní grafický editor. Testovali jsem hlavně model MD2 nahraný vedlejší vývojovou verzí Java3D tj. s JME[4]. Další možností je použítí struktůry, která je dostatečně univerzální a jenž spojuje kostru s modelem a existují k ní vhodné syntaktické analyzátory pro Java3D, v niž je program vytvořen. V tomto směru se jako velmy vhodná jeví struktůra Hanim1.1 LOA1[2] ve VRML. Jejiž výhoda je hlavně ve velkém množství parserů, jednoduché syntaxi, v provázání kostry s částmi těla jako samostanými modely i případně s jedním tělesem , chrakterizující kompletní model kůže člověka. Zároveň je Hanim univerzální model podporovaný velkým množstvím editorů, např.: Flux[7], Poser, Blender[6]. 3DMAX, Maya, XSI, LightWave jsou masivní grafické systémy, které mají vlastní animační rozhraní, ale pro výsledné řešení jsou díky ceně licence problematicky použitelné[8]. Pro načtení Hanim modelu jsem testoval tyto loadery[5]: od vývojářů společnosti SUN j3d-vrml97.jar, loader z Xj3D a CyberVRML97 od Satoshi Konna. Xj3D byl použit pro načítání dynamických modelů(jako je VRML scéna s časovači a interpolátory), ale pro načtení modelu humanoida je vhodnější požití klasického loaderu od společnosti SUN jelikož vytváří stromovou strukturu obdobnou jako je použita v Java3D, která je velice vhodná pro dědění transformací v kloubech humanoida. CyberVRML97 má na internetu menší podporu. Popis implementace public class Room3D extends Panel {... void CreateObject(String ID,float x,float y,float z,float angle,String file,Vector3d scale); /*Načte objekt typu *.3ds a nahraje ho do stromove struktůry java3D, priřadí mu identifikační císlo ID, umístí ho na pozici x,y,z otočí jej o uhel angle vůči ose rovnoběžné s normálovým vektorem zakladny a zvětší celý objekt podle scale včetně korekce výšky(z-složky). */ void CreateHuman(String ID,float x,float y,float z,float angle,Color col,Vector3d V); void CreateHuman(String ID,float x,float y,float z,float angle,Material MATERIAL[]); void CreateHuman(String ID,float x,float y,float z,float angle,Material MATERIAL[],Vector3d scale); /*Předchozí metoda je obohacena o možnot úpravy povrchů všech materiálů ze kterých se skládá člověk a o změnu jeho velikosti včetně korekce výšky Použitý model člověka se skládá z 14 častí, tj. definujeme 14 materiálů MATERIAL. Pokud nastavíme položku materiálu na null, pak se přebírá původní hodnota materiálu. 0-oblek(+kalhoty,boty) 1-stehna 2-dlaně,prsty 3-krk 4-obličej 5-přeska u kalhot 6-oči1 7-oči2 8-vlasy,řasy 9-knoflíky 10-rty 11-košile 12-bryle 13-kravata */ void CreateDoor(String ID,float x,float y,float z,float CloseAngle, float OpenAngle,String file,Vector3d scale); /* Předchozí metoda byla obohacena o možnost zvětšit celý objekt podle scale včetně korekce výšky(z-složky) */ void CreateBackground(Applet A,Point3f p,int velikost, int perimetr,String textura,Point3f[] point); /* Vytvoří pozadí scény. Externí obrázek "textura" se načte na plášť válce o poloměru perimetr se středem v point. Metoda se ještě upravuje. */ void CreateCanvas(String ID, Applet A,Point3f POINT[],String image); /* Na polygon, jehož vrcholy jsou uloženy v poli POINT je nahrána textura image. Vytvoří se instance objektu CanvasControl. Instance obsahuje vlákno, kterému můžeme metodou setImage měnit texturu při běhu programu. Tímto spůsobem je možné vytvářet objekty jako obrazy, měnící se obrazovka monitoru, měnící se projekční plocha atp. */ void CreateBillboard(String ID, Applet A,Vector3d Scale, Point3f Transl,String image); /* Metoda vytvoří billboard zvětšený o scale a posunutý o Transl obsahující obrázek image. Vytvoří se instance objektu CanvasControl.Instance obsahuje vlákno, kterému můžeme metodou setImage měnit texturu při běhu programu. Tímto spůsobem je možné vytvářet objekty jako stromy, květiny, mraky, záře a jejich animace jako např. rostoucí květiny atp. */ void CreateActiveObject(String ID,Vector3d Scale,Point3f Transl,Shape3D shape3D,Appearance appearance[],int state,int interval); /* Tato metoda slouží k umístění libovolného útvaru typu Shape3D do scény. Tomuto objektu je po intervalech přidělován vzhled appearance. Vytvoří instanci třídy ActiveObjectControl. To kdy jaká vlastnost appearance je aktivní je dáno proměnnou interval a vnitřní konstantou, objektu ActiveObjectControl, State. public static final int CHANGING = 1 - postupne jsou přepínány vzhledy appearance ,defaultní public static final int FIRST = 2 - je aktivní první appearance public static final int LAST = 3 - je aktivní poslední appearance */ void CreateXj3DObject(String ID,String object,Vector3d Scale,Point3f Transl); /* Za pomoci knihovny Xj3D načte VRML model včetně interpolátorlů a časovačů. Vhodné pro nahrání jednoduchých animací vytvořených ve VRML. Je nutné značné množství knihoven a model je citlivý na bezchybnost zápisu VRML. */ void CreateHanimObject(String ID,String object,Point3f Transl,float angle,Vector3d Scale,int state,String hname); /* Vytvoří instaci objektu HanimObject. hname - nazev VRML souboru obsahujici Hanim model cloveka state - stav modelu cloveka , udava do jakeho stavu by se mel clovek dostat, resp. v jakem stavu se nachazí regulární automat řídící transformace kloubů. Třída ještě není kompletní, je nutné rozšířit stavový automat a vyřešit animace kůže.*/ void CreateRoom(float SizeX,float SizeY,float SizeZ,Point3f point[]); /* Oproti původní metodě je zde rozšíření, které umožňuje používat průřezy. Metoda se použije hlavně při vytváření oken, otvorů pro dveře atp. */ void setImage(String id,String image); /* Metoda, která objektu typu CanvasControl přiřadí texturu. Požito pro vytváření animací. */ void setHAnimProperty(String id,Point3f Translate,float Rotate,int State, int interval,int Cycle ); /* Metoda setHAnimProperty předává parametry metodě která je implementována v objektu HanimObject. */ void setProperty(String id,Appearance appearance[],int State, int interval ); void setProperty(String id,int State, int interval ); /* Nastaví vlastnosti instanci třídy ActiveObjectControl. */ void setText(String id,String text,Color3f color); /* Nad objekt je vypsán text "text" v barvě color. */ void traverse(int i,Enumeration e); void analyza(int hladina,Group sceneGroup); /* Pomocné metody pro procházení stromem načteného VRML souboru. */ ... } public class CanvasControl extends Behavior { /* Třída sloužící pro vytváření oběktů, jenž jsou potaženy dynamickými texturami. */ ... } public class ActiveObjectControl extends Behavior { /* Třída pro dynamickou změnu appearance. */ ... } public class HanimObject extends RoomObject { Hashtable NodeHashtable; /* Monožina, kde klíčem je jméno uzlu a položkou je odkaz na objekt typu Node. Tato proměnná je nezbytná pro řízení jednotlivých kloubů modelu, jelikož spojuje název kloubu a jeho místo ve stromu celé scény. */ ... public BranchGroup getVRMLScene(String filename); /* Načte VRML soubor a vytvoří z něho stromovou struktůru. */ private class Director extends Behavior { /* Třída nezbytná pro řízení kloubů. Je v ní implementován stavový automat a jeho vnitřní proměnné s nastavením časovačů. */ ... } ... } public class RoomObject { ... void setText(String S,Color3f color,int vel); /* Metoda, která vloží orientovaný text S o velikost vel a v barvě color nad objekt, který je potomkem RoomObject a tedy sdědí tuto metodu. */ ... } Co je možné vylepšit a rozšířit - Spojit hlavní a externí časovače, tak a aby se odstranilo spoždění a zároveň by se zmenšil počet vláken . Lépe synchronizovat hlavní časovač s vlákny v HanimObject. - Nepoužívám kostru potaženou kůží , ale kostru kde mezi použitými klouby je model ruky,lokte,ramena,...... svým způsobem to není nevýhoda, hlavně je jednoduší úprava v ext.editorech , ale při návrhu je nutné vhodně upravit oblast okolo klobních spojů tak aby při výrazném vychýleni nedošlo k "vykloubeni". Proto je vhodné se znovu pokusit načítat přímo kostry potaženou kůží. Velice vhodně se v tomto případě jeví třídá HanimFactory[10], která je definována v řadě nadstavbách pod java3D, ale není moc dobře zdokumentována. - Za pomoci knihovny Xj3D je možné načíst hotového avatara všetně animací a kostry, jenž je obalena kůží, ale složitějši řizení transformace kostry s transformací kůže se nepodařilo prozatím vyřešit. - dokončit vlastní modely postav - otestovat alternativní knihovny, velice zajímavě vypadá JME[4]. Použité zdroje 1 models http://www.cis.upenn.edu/~beitler/hanim1.0/ 2 H-anim http://www.h-anim.org/Specifications/H-Anim1.1/#other_joints http://www.web3d.org/x3d/content/examples/Basic/index.html http://www.ballreich.net/vrml/h-anim/h-anim-examples.html 3 Nurbs and load H-anim into java3d http://www.frontiernet.net/~imaging/nurbs http://www.frontiernet.net/~imaging/java3d_and_vrml.html http://www.frontiernet.net/~imaging/nurbs.html 4 Java3d,JME,JOGL,aviatrix,Xith http://java3d.j3d.org/ http://en.wikipedia.org/wiki/JMonkey_Engine http://www.jmonkeyengine.com/ http://aviatrix3d.j3d.org/ 5 loader into java3d http://www.web3d.org/x3d/xj3d/ http://java3d.j3d.org/utilities/loaders.html http://www.xj3d.org/tutorials/j3d_loader.html http://www.cybergarage.org/vrml/cv97/cv97java/index.html http://www.newdawnsoftware.com/ 6 Blender & Hanim http://kokcito.tk/tut/rig2.html http://en.wikibooks.org/wiki/Blender_3D:_Tutorial_Links_List 7 Flux http://www.mediamachines.com/ http://philliphansel.com/avatars/hanim/hanim_frame.htm http://www.phamhi.com/tuto3/ 8 description of editors http://www.engineering.leeds.ac.uk/comp/pg/documents/daham_jassem.pdf,page 35-36 9 Tutorial,Forum,links,others http://www.gamasutra.com/features/20051216/ http://www.newdawnsoftware.com/ http://www.xith.org/forum/index.php 10 source, HanimFactory http://www.krugle.com/examples/p-horz8LXJ9ArmfJUy/BaseHAnimDisplacer.java http://www.interactivemesh.org/testspace/xj3dloader.html 11 materials, texture http://devernay.free.fr/cours/opengl/materials.html http://local.wasp.uwa.edu.au/~pbourke/texture_colour/ 12 animation VRML http://ligwww.epfl.ch/~babski/StandardBody/Animation.html 13 VRML models http://www.alaska.net/~dennism/projects/ http://www.web3d.org/x3d/content/examples/Basic/ http://www.ballreich.net/vrml/h-anim/h-anim-examples.html 14 next sources http://sourceforge.net/projects/openvrml/
Podobné dokumenty
Návod - UPgates
programu, Seznam souborů MP3, Seznam obrázků, Seznam médií a
Disk/paměť.
5. Průvodce EPG– Informace o programu se zobrazí pouze v případě, že jsou
u dané vysílací stanice dostupné.
6. Hry– Zahrát s...
Blender v.2.45
zase přiřazení zruší, ale materiál zůstane zachován. Pokud se má i ničemu nepřiřazený
materiál uložit do souboru blend, stiskneme tlačítko F.
Práce s barvami materiálu: Col, Spe, Mir – nastavení di...
Co je porucha osobnosti?
založen více na vědomých rozhodnutích jedince.
Formování charakteru tedy do značné míry
souvisí se zvládnutím vývojových etap, jejich
úskalí (krizí) a je zásadně ovlivněno vztahy
Simulink 3D Animation
–Anebo vytvořte několik vnořených uzlů typu Transform a otáčení
rozložte na otáčení každé úrovně podle jedné osy (viz vrpend)
5. TECHNOLOGIE VÝROBY KARTONÁŽÍ Z VLNITÝCH LEPENEK
potisku nebo potištěné jednou i více barvami, v jednoduchých grafických úpravách, ale i
v náročných grafických úpravách reprodukujících barevné fotografie a jejích kombinacemi s písmem a plošnými ú...