Extension of room visualization Karel POCHOP ([email protected])

Transkript

Extension of room visualization Karel POCHOP ([email protected])
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

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...

Více

Blender v.2.45

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...

Více

Co je porucha osobnosti?

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

Více

Simulink 3D Animation

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)

Více

návod - MDP, Michal Dušek

návod - MDP, Michal Dušek dostatek síly v tìchto otáèkách (více na www.mdp.cz)

Více

5. TECHNOLOGIE VÝROBY KARTONÁŽÍ Z VLNITÝCH LEPENEK

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 ú...

Více