Loading presentation...

Present Remotely

Send the link below via email or IM

Copy

Present to your audience

Start remote presentation

  • Invited audience members will follow you as you navigate and present
  • People invited to a presentation do not need a Prezi account
  • This link expires 10 minutes after you close the presentation
  • A maximum of 30 users can follow your presentation
  • Learn more about this feature in our knowledge base article

Do you really want to delete this prezi?

Neither you, nor the coeditors you shared it with will be able to recover it again.

DeleteCancel

Make your likes visible on Facebook?

Connect your Facebook account to Prezi and let your likes appear on your timeline.
You can change this under Settings & Account at any time.

No, thanks

JAVA 3D

Prezentare EGC
by

Adina P

on 11 January 2013

Comments (0)

Please log in to add your comment.

Report abuse

Transcript of JAVA 3D

Va multumim
pentru atentie! Munteanu Cristina
Paraschiv Adina
Serban Iulian
Viorica Florin Principii de baza ale graficii 3D Modelare 3D Lumini si umbre in grafica 3D Bibliografie Introduction to Computer Graphics Using Java 2D and 3D, Frank Klawonn
http://docs.oracle.com/cd/E17802_01/j2se/javase/technologies/desktop/java3d/forDevelopers/J3D_1_3_API/j3dapi/javax/media/j3d/Clip.html
http://www.java2s.com/Code/Java/3D/ExClipillustrateuseoflinearfogwithaclipnode.htm
Visible Surface Determination, Foley & Van Dam, Chapter 15
Introduction to Programming with Java 3D, Henry A. Sowizral
Visible-Surface Detection, Jehee Lee, Seoul National University
http://www.cs.stir.ac.uk/courses/CSC9N6/lectures/bpg/
http://fivedots.coe.psu.ac.th/~ad/jg/
http://public.rz.fh-wolfenbuettel.de/~klawonn/computergraphics/e-buch/java3Dex/TransparencyExample.java
http://www.tecgraf.puc-rio.br/~ismael/Cursos/Cidade_CG/labs/Java3D/Java3D_onlinebook_selman/Htmls/3DJava_Ch14.htm#14-4
http://www.wattpad.com/83988-mariancdj?p=50#!p=51 Introducere în JAVA 3D Surse de lumina Surse de lumina in JAVA 3D Reflexie Proprietatile corpurilor Surse de lumina Proiectia Tip special de cartografiere a spațiului tridimensional pentru un plan. Iluminarea și reflecțiile de lumină permit diferite efecte de lumină pe suprafe-țele obiectelor tridimensionale și o umbrire neomogena pentru proiecțiile lor.
Imaginile plate apar vii și ofera o impresie tridimensionala
Efectele de iluminare au fost luate în considerare pentru sfera și cubul secun-de. Lipsa lor conduce la forme geometrice cu o culoare omogena ce pierd informațiile complete despre structura tridimensionala. Surse de lumina Observatorul care priveşte o scenă 3D iluminată de o sursă de lumi-nă dintr-o poziţie diferită de aceea a sursei de lumină, va vedea um-brele produse de obiectele scenei, contribuind la realismul imaginii, îmbunătăţind percepţia profunzimii. Umbra Sursa de lumina in spatele obiectelor Sursa de lumina din spatele corpurilor catre observator Sursa de lumina in fata corpurilor Plan de proiectie Proiectori obiect Observator Proiectie plana Surse de lumina Descrierea unei scene tridimensionale trebuie să includă informa-ții despre iluminarea scenei. O singura sursa de lumina sau un număr variabil pot contribui la iluminarea unei scene.
Sursele de lumină vor oferi o lumina alba sau "gri", o lumină albă care nu are intensitate maximă.
Tipuri de bază de surse de lumină: emițători
reflectori
Orice obiect care emite lumina este un emitator.
Unele obiecte nu primesc lumina direct,dar sunt totusi luminate de lumina reflectata de pereti,tavan (alte corpuri). Reflectorii sunt toate celelalte corpuri care nu sunt emitatori. Reflexia Materialele reflectorizante sunt considerate ca fiind extrem de lucioase. Modele empirice:
Lumina ambianta
Lumina difuza
Lumina speculara

Modele analitice
Modelul Lambert
Modelul Gouraud
Modelul Phong Modele pentru calculul luminii Primeste mai putina lumina Primeste mai multa lumina Trebuie sa se determine cantitatea de lumina primita de obiect de la sursa de lumina. Lumina difuza
se apropie cel mai mult de majoritatea luminilor din lumea reala
clasa luminilor cu sursa si directie
pozitia observatorului nu influenteaza culoarea obiectului in acest caz (intensitatea sa este aceeasi indiferent de pozitia observatorului)‏ Lumina difuza Obiectele primesc lumina de la sursele de lumina
lumina reflectata sau  transmisa de celelalte obiecte ale scenei = lumina ambientala (este o sursa de lumina distribuita uniform in spatiu).



Ia–  este intensitatea luminii ambientale (este constanta pentru toate obiectele scenei)‏
ka ( 0<= ka<= 1) este coeficientul de difuzie a luminii  ambientale, dependent de material Lumina ambientala Modele pentru calculul luminii Iluminarea locala
surse de lumina
pozitia observatorului
proprietatile de material


Iluminarea globala
interactiunea provenita de la toate suprafetele scenei Lumina difuza Pentru vizualizarea a doua suprafete paralele construite din acelasi material se va obtine aceeasi intensitate
Obiectele mai îndepartate de sursa sunt mai slab luminate. Lumina speculara Este componenta care da stralucirea obiectelor.
Se aseamana cu lumina difuza, este focalizata.
Lumina speculara nu poate fi vazuta din orice pozitie.
Observatorul trebuie sa se afle chiar pe directia ei. Lumina speculara

coeficientul de reflexie speculara
N normala la suprafata in P
IP intestatea luminii
n: coeficient de stralucire

vectorii R si V normalizati Iluminarea Iluminarea Iluminarea Modele de iluminare Modele de iluminare Surse de lumina in JAVA 3D Java 3D oferă clase pentru toate sursele de lumină prezentate.
Ca și pentru obiectele din scena, o instanță bgLight a clasei BranchGroup trebuie să fie creata in primul rand.
Toate luminile vor fi introduse în acest BranchGrup cu metoda addChild.
bgLight însasi va fi inclusa în scenă prin adăugarea sa la SimpleUniverse cu metoda addBranchGraph.
Pentru fiecare sursă de lumină, o culoare trebuie să fie definit prin trei valori reale:
Color3f lightColour = new Color3f(r,g,b);

Fiecare sursa de lumina poate avea o culoare diferita Lumina ambientala Lumina ambientala se creaza cu ajutorul clasei AmbientLight
AmbientLight ambLight = new AmbientLight(lightColour);
ambLight.setInfluencingBounds(bs);
bgLight.addChild(ambLight);
Culoarea este un gri, intensitățile pentru R,G,B sunt egale, mai mici decat 1 si mai mari decat 0.
Metodele setInfluencingBounds și addChild se aplica la fel pentru toate celelalte surse de lumină (specifica regiunea de încadrare a sursei de lumină și se adauga la BranchGroup bgLight. Grafica 3D - prezentare generalăa În grafica 3D mai apare conceptul de cameră şi de fereastră.

Camera - se află în punctul din care privim, raportat la restul obiectelor din spatiul reprezentat.
Fereastra (prin care privim) - în spaţiu 3D care are acceaşi dimensiune ca şi fereastra ecranului.

Dacă poziţionăm camera în origine (punctul de coordonate (0, 0, 0)) şi fereastra prin care privim în direcţia opusă a axei z, după cum putem vedea în prima figura de mai jos, acest lucru face ca axa z să scadă pe masură ce ne depărtăm de ea.

Acesta este modul obişnuit de a reprezenta fereastra prin care privim. Trunchiul de vizualizare (view frustum) :
este tot ceea ce poate vedea camera.
forma este de obicei o piramidă cu patru pereţi, câteodată cu vârful tăiat de un panou. Doar ceea ce se află în interiorul trunchiului trebuie desenat.
Nodurile structurii aborescente ale scenei se împart în două categorii:

Group - este un nod care are copii (descendenţi). Nodurile sunt grupate astfel încat operaţii ca translatarea, rotaţia şi scalarea să poată fi aplicate grupat (toate simultan).

Leaf - sunt frunzele grafului, care de cele mai multe ori reprezintă lucrurile vizibile din scena grafului cum ar fi modelele, însa pot fi şi entităţi netangibile , ca de exemplu sunetele şi lumina.

În plus, un nod de tip Leaf (pentru o formă 3D) poate avea componente de tip nod, culori specifice şi alte atribute ale frunzei. Graful scenei


Modele 3D reprezintă un obiect 3D folosind o colecție de puncte în spațiul 3D, conectate prin diverse entități geometrice, cum ar fi triunghiuri, linii, suprafețe curbe, etc Fiind o colectie de date ( puncte de date și informații de altă natură), modele 3D pot fi create de mână , algoritmic ( modelare procedurale ), sau scanat .



Modelele 3D sunt utilizate pe scară largă oriunde in grafica 3D . De fapt, utilizarea lor anterioară utilizarea pe scară largă a graficii 3D pe computerele personale . Multe jocuri de calculator folosit pre-prestate imagini de modele 3D ca sprite înainte de calculatoare le-ar putea face în timp real.



Astazi, modele 3D sunt folosite într-o varietate de domenii. Industria medicala foloseste modele detaliate ale organelor. Industria filmului le folosește ca personaje și obiecte de animate și viața reală imagini în mișcare . Industria jocurilor video le foloseste ca active pentru jocuri de calculator și video . Sectorul știință le folosește ca modele foarte detaliate de compusi chimici.Industria Arhitectura le foloseste pentru a demonstra clădirilor propuse și a peisajelor, prin modele arhitecturale Software . Comunitate de inginerie le foloseste ca modele de noi dispozitive, vehicule și structuri, precum și o serie de alte utilizări. În ultimele decenii, știința pământului comunitatea a început să construiască modele 3D geologice ca o practică standard. Lumina infinita(directionala) lumineaza dintr-un plan directional, ca lumina solara.
generata cu clasa DirectionalLight
direcția razelor de lumină paralele ia forma unui vector
(x, y, z) format din valori reale cu o instanta a clasei Vector3f Vector3f lightDir = new Vector3f(x,y,z);
DirectionalLight dirLight = new DirectionalLight(LightColour,lightDir); Lumina pozitionala situata aproape sau chiar in interiorul scenei
culoare si 2 instante ale clasei Point3f: locatia si atenuarea
PointLight pLight= new PointLight (lightColour,location,attenuation);
instanta location determina pozitia sursei de lumina
instanta attenuation - coeficientii pentru atenuare( constanta, liniara si patratica)
Point3f atten = new Point3f(1.0f, 0.0f, 0.0f); Lumina de tip Spot caz particular de lumina pozitionala
emite lumina dintr-un punct precizat, cu emiterea luminii sub forma unui con
realizata cu ajutorul clasei SpotLight
aceleasi atribute ca lumina pozitionala, dar si directia in care straluceste, limita unghiulara si concentratia - Direction, Spread, Concentration.
contribuie la reflexiile difuze si speculare,dar nu si ambientale

Vector3f lightSDirection =new Vector3f(0.0f,0.0f,-1.0f);
SpotLight lightS = new SpotLight(lightSColor, lightSPosition,lightSAttenuation,
lightSDirection,lightSSpread,
lightSConcentration); Umbre aspectul este atribuit fiecarui obiect pentru a caracteriza proprietatile suprafetei obiectului
clasa Appearance
atribut important al aspectului - materialul
proprietățile de material, rezultand suprafața se specifica în constructorul:
Material ma = new Material(ambientColour,emissiveColour,
diffuseColour,specularColour,
shininessValue);
instante ale clasei Colour3f si stralucirea (0,128)
aspectul cu proprietăți de reflecție poate fi creat cu metoda setMaterial
Appearance app = new Appearance();
app.setMaterial(ma); Umbre Metoda setShadeModel - modelul de umbra pentru componenta
ColoringAttributes a obiectului

FASTEST - cea mai rapida metoda pentru umbrire
NICEST - highest quality
SHADE_FLAT - modelul de umbrire plat
SHADE_GOURAUD - modelul de umbrire Gouraud (neted)
- modelul de umbra implicit

Appearance app = new Appearance();
ColoringAttributes ca = new ColoringAttributes(
new Color3f(1.0f,1.0f,1.0f),ColoringAttributes.SHADE_FLAT);
app.setColoringAttributes(ca); Transparaenta clasa TransparencyAttributes permite transparența obiectelor
atribute:
modul de transparenta (NICEST, FASTEST, NONE, SCREEN_DOOR, BLENDED)
functie de compozitie (BLEND_ZERO,BLEND_ONE, BLEND_SRC_ALPHA, BLEND_ONE_MINUS_SRC_ALPHA)
valoare de compozitie - Alpha cu valori ce variază de la 0.0 - opacitate completă, la 1.0 - transparență completă.
TransparencyAttributes ta = new TransparencyAttributes ();
ta.setTransparencyMode (ta.BLENDED);
ta.setTransparency (0.5f); Texturi imagine proiectata prin modelarea detaliilor de suprafață.
imaginea e transformata intr-o instanta a clasei ImageComponent2D cu metoda getScaledImage, pe o latime w si inaltimea h.
TextureLoader textureLoad =new TextureLoader("image.jpg",null);
ImageComponent2D textureIm=textureLoad.getScaledImage(128,128);
se genereaza o instanta a clasei Texture2D, atribuita clasei Appearance
background in Java 3D:
TextureLoader textureLoad =new TextureLoader("image.jpg",null);
Background bg =new Background(textureLoad.getImage());
bg.setApplicationBounds(bounds); Texturi Texture2D myTexture =new Texture2D(Texture2D.BASE_LEVEL,
Texture2D.RGB,textureIm.getWidth(),
textureIm.getHeight());
myTexture.setImage(0,textureIm);
Appearance textureApp =new Appearance();

textureApp.setTexture(myTexture);
TextureAttributes textureAttr =new TextureAttributes();
textureAttr.setTextureMode(TextureAttributes.REPLACE);
textureApp.setTextureAttributes(textureAttr);
textureApp.setMaterial(new Material()); // Set the influencing bounds
aLgt.setInfluencingBounds(bounds);
lgt1.setInfluencingBounds(bounds);
lgt2.setInfluencingBounds(bounds);

// Add the lights into the scene graph
objScale.addChild(aLgt);
l1Trans.addChild(lgt1);
l2Trans.addChild(lgt2);

// Create a new Behavior object that will perform the desired
// operation on the specified transform object and add it into the scene graph.
...
// Create a new Behavior object that will perform the desired
// operation on the specified transform object and add it into the scene graph.
....
// Create a position interpolator and attach it to the view platform
TransformGroup vpTrans =
u.getViewingPlatform().getViewPlatformTransform();
Transform3D axisOfTranslation = new Transform3D();
...
}

public SphereMotion() {...}

// The following allows SphereMotion to be run as an application as well as an applet
public static void main(String[] args) {...}
} // Create the transform group node for the each light and initialize
// it to the identity. Enable the TRANSFORM_WRITE capability so that
// our behavior code can modify it at runtime. Add them to the root
// of the subgraph.
TransformGroup l1RotTrans = new TransformGroup();
l1RotTrans.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
objScale.addChild(l1RotTrans);

TransformGroup l2RotTrans = new TransformGroup();
l2RotTrans.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
objScale.addChild(l2RotTrans);

// Create transformations for the positional lights
t = new Transform3D();
Vector3d lPos1 = new Vector3d(0.0, 0.0, 2.0);
t.set(lPos1);
TransformGroup l1Trans = new TransformGroup(t);
l1RotTrans.addChild(l1Trans);

t = new Transform3D();
Vector3d lPos2 = new Vector3d(0.5, 0.8, 2.0);
t.set(lPos2);
TransformGroup l2Trans = new TransformGroup(t);
l2RotTrans.addChild(l2Trans); // Create Geometry for point lights
ColoringAttributes caL1 = new ColoringAttributes();
ColoringAttributes caL2 = new ColoringAttributes();
caL1.setColor(lColor1);
caL2.setColor(lColor2);
Appearance appL1 = new Appearance();
Appearance appL2 = new Appearance();
appL1.setColoringAttributes(caL1);
appL2.setColoringAttributes(caL2);
l1Trans.addChild(new Sphere(0.05f, appL1));
l2Trans.addChild(new Sphere(0.05f, appL2));

// Create lights
AmbientLight aLgt = new AmbientLight(alColor);

Light lgt1;
Light lgt2;

if (usePointLights) {
Point3f lPoint = new Point3f(0.0f, 0.0f, 0.0f);
Point3f atten = new Point3f(1.0f, 0.0f, 0.0f);
lgt1 = new PointLight(lColor1, lPoint, atten);
lgt2 = new PointLight(lColor2, lPoint, atten);
}
else {
Vector3f lDirect1 = new Vector3f(lPos1);
Vector3f lDirect2 = new Vector3f(lPos2);
lDirect1.negate();
lDirect2.negate();
lgt1 = new DirectionalLight(lColor1, lDirect1);
lgt2 = new DirectionalLight(lColor2, lDirect2);
} public class SphereMotion extends Applet {

// Flag indicates whether to use directional or point light
private static boolean usePointLights = true;

public BranchGroup createSceneGraph(SimpleUniverse u) {
Color3f eColor = new Color3f(0.0f, 0.0f, 0.0f);
Color3f sColor = new Color3f(1.0f, 1.0f, 1.0f);
Color3f objColor = new Color3f(0.6f, 0.6f, 0.6f);
Color3f lColor1 = new Color3f(1.0f, 0.0f, 0.0f);
Color3f lColor2 = new Color3f(0.0f, 1.0f, 0.0f);
Color3f alColor = new Color3f(0.2f, 0.2f, 0.2f);
Color3f bgColor = new Color3f(0.05f, 0.05f, 0.2f);

Transform3D t;

// Create the root of the branch graph [...]
// Create the root of the branch graph [...]
// Create a Transformgroup to scale all objects to appear in the scene. [...]
// Create a bounds for the background and lights [...]
// Set up the background [...]
// Create a Sphere object, generate one copy of the sphere,
// and add it into the scene graph.
Material m = new Material(objColor, eColor, objColor, sColor, 100.0f);
Appearance a = new Appearance();
m.setLightingEnable(true);
a.setMaterial(m);
Sphere sph = new Sphere(1.0f, Sphere.GENERATE_NORMALS, 80, a);
objScale.addChild(sph); Grafica 3D se bazează, pentru realizarea ultimilor paşi de randare, pe aceeaşi algoritmi folosiţi în grafica 2D rastru vectorială.

Distincţia dintre grafica 3D şi 2D este uneori greu de făcut deoarece :
aplicatiile 2D pot folosi tehnici 3D pentru a obtine efecte cum ar fi luminarea
aplicaţiile 3D pot folosi tehnici 2D de randare. Grafica 3D Procesul de randare a imaginii 2D
pentru obtinerea imaginii 3D Sistemul de coordonate in grafica 3D În grafica 3D există trei axe, care trebuiesc transpuse pe o suprafaţă 2D.

De obicei se foloseşte un sistem de coordonate 3D, unde axa x este indreptată spre "dreapta", axa y în "sus", iar axa z "înapoi". Primitive in Java 3D Conceptul de camera si de fereastra Conceptul de camera si de fereastra Vizualizarea scenei
Determinarea suprafetelor vizibile

Taierea in Java3D
Fundaluri
Ceata. Clasa Fog Suprafete Vizibile in Medii 3D Densitatea creste exponential cu distanta
Ceata densa, realista
Metode
Void setDensity ( float Density )
Void setColor ( Color3f color ) Ceata Exponentiala Se retine valoarea z (de adancime) a fiecarui pixel, pe langa valorile de pozitie x si y
Daca se detecteaza un pixel in pozitia (x, y) care e mai aproape de planul de proiectie fata de pixelul care se afla deja acolo, acesta este suprascris Metoda Bufferului in Adancime
(Z-Buffer) Suprafete vazute pe planul de proiectie
Eliminarea obiectelor invizibile prin taiere
Obiecte care nu sunt in campul de vizibilitate
Obiecte ascunse in spatele altor obiecte
Linia ascunsa, linia vizibila, eliminarea suprafetelor ascunse
Determinate prin algoritmi Determinarea Suprafetelor Vizibile fog = new LinearFog();
    fog.setColor(color);
    fog.setFrontDistance(front);
    fog.setBackDistance(back);
    fog.setCapability(Fog.ALLOW_COLOR_WRITE);
    fog.setCapability(LinearFog.ALLOW_DISTANCE_WRITE);
    fog.setInfluencingBounds(worldBounds);
    scene.addChild(fog); Fog Exemplu – Clip. Background. Fog Densitatea creste linear cu distanta
Mai usor de controlat, dar nu la fel de realista
Metode
Void setFrontDistance ( double front )
Void setBackDistance ( double back )
Void setColor ( Color3f color ) Ceata Lineara Afecteaza culoarea entitatilor, dar nu si forma lor
Formele distante iau culoarea cetii, dar isi pastreaza forma Efectul de ceata Setarea culorii – implicit negru
Void setColor ( Color3f color )
Volumul si raza de actiune
void setInfluencingBounds ( Bounds bounds )
void setInfluencingBoundingLeaf ( BoundingLeaf leaf ) Metode Realism crescut
Acopera discontinuitatea la folosirea taierii
Ascunde obiecte – putem evita generarea lor
2 tipuri in Java3D
Exponentiala
Lineara
Superclasa Fog din care se extind clasele ExponentialFog si LinearFog Lucrul cu Ceata Se face doar daca setam granitele
Void setApplcationBounds ( Bounds bounds)
Void setApplicationBoundingLeaf ( BoundingLeaf leaf )
Devine activ atunci cand raza de activare a spectatorului intersecteaza granitele aplicatiei
Cu ajutorul metodelor, se pot aplica fundaluri diferite pentru portiuni diferite din mediul 3D Aplicarea Fundalului Constructor:
Background ( )
Metode:
Void setColor (Color3f color)
Void setImage (ImageComponent2D image)
Void setGeometry (BranchGroup group) Clasa Background Culoare solida sau gradient
Imagine
Fundal Geometric
Distanta infinita
Schimbarea fundalului in acelasi timp cu schimbarea pozitiei
Trebuie amplasata pe o sfera Fundalul in Java3D Constructori:
Clip ( ) – creeaza un Clip cu parametrii impliciti
Clip ( double backDistance ) – creeaza un Clip cu distanta de taiere specificata
Metode:
Void setApplicationBounds ( Bounds region )
Void setApplicationBoundingLeaf ( BoundingLeaf region )
Void setBackDistance ( double backDistance ) Clasa Clip Clasa Clip
Taie formele care sunt la distanta sau ascunse
Stabilirea unor granite de taiere permite folosirea mai multor plane de taiere
Daca nu sunt active plane de taiere, sunt folosite taierile de distanta ale obiectelor
Forme: sfera, cub, etc. sau combinatii Taierea Formelor Invizibile Medii 3D Complexe Comun datorita simplicitatii si usurintei de implementare
Are in general 32 de biti pe pixel
Buffer-ul poate fi salvat pentru reprocesarea imaginii

Necesita memorie multa (la o rezolutie de 1024 x 1024 avem peste un milion de pozitii in buffer)
Genereaza poligoane care nu sunt vizibile
Necesita recalculare la schimbarea scalei Z-Buffer Exemplu Z-Buffer Exemplu Z-Buffer Initializare
ZB <- cel mai distant Z;
IB <- culoare de background;
Pentru fiecare poligon {
pentru fiecare pixel din poligon {
calculeaza Z(x,y);
daca Z(x,y) este mai aproape decat ZB(x,y){
ZB(x,y) = Z(x,y);
IB(x,y) = culoarea poligonului;
}
}
} Z-Buffer Aceeasi p pixeli si aceleasi n obiecte
O(n*n) operatii

pentru (fiecare obiect){
se determina partile obiectului care nu sunt
ascunse de alte obiecte sau de obiectul insusi;
se deseneaza partile obiectului in culorile respective;
} Precizia Obiectelor Se presupune ca avem o imagine cu p pixeli si n obiecte
O(p) operatii

pentru (fiecare pixel) {
se determina cel mai apropiat obiect de observator
care e strapuns de normala prin pixel;
se deseneaza pixelul cu culoarea respectiva;
} Precizia Imaginii Metode si algoritmi de precizie a imaginii
Se determina ceea ce este vizibil pentru fiecare pixel de pe planul de proiectie
Sunt mai comune si mai simple
Metode si algoritmi de precizie a obiectelor
Compara obiectele si parti din obiecte pentru a determina ce parti din acestea sunt vizibile Clasificare Algoritmi de precizie a imaginii si de precizie a obiectelor
Eliminarea suprafetelor din spate (Back-face culling)
Partitionarea spatiala
Tehnici de precizie a imaginii
Algoritmul z-buffer (sau buffer adancime)
Scanarea liniilor
Trasarea de raze
Algoritmi de prioritate Algoritmi Pentru Eliminarea Obiectelor Planul de Proiectie in Perspectiva Unghiul de vizualizare determina campul de vizibilitate - care determina cat de mult vede utilizatorul in stanga si dreapta
Lucru care determina latimea planului de vizualizare ( latimea monitorului )
Inaltimea poate fi aleasa proportional cu inaltimea monitorului Planul de proiectie Parametrii pentru generarea undei scene 3D
Coordonatele punctului in care se afla observatorul
Directia in care observatorul priveste
Planul de proiectie ( sau un unghi de vizualizare ) Vizualizarea Unei Lumi 3D Locatia si orientarea utilizatorului este controlata prin clasa ViewPlatform
Modurile de vizualizare, incluzand parametrii si politicile sunt controlate de clasa View
Locatia de desenare este selectata de clasa Canvas3D
Ecranul fizic e descris prin clasa Screen3D Modelul de vizualizare in Java3D Spatiul de afisare (ecranul) este 2D
Trecerea de la 3D la planul 2D folosind proiectii Proiectii // Seteaza culoarea de fundal si granitele in care se aplica.
    // De obicei aceasta are aceeasi culoare ca si ceata
// altfel pot aparea rezultate nedorite
    background = new Background();
    background.setColor(color);
    background.setApplicationBounds(worldBounds);
    background.setCapability(Background.ALLOW_COLOR_WRITE);
    scene.addChild(background); Background // Adauga o regiune de taiere, avand distanta
// din spate egala cu distanta cetei. Acest lucru
// asigura ca figurile sunt taiate din spatele cetei
// (densitate maxima) inspre infinit
    clip = new Clip();
    clip.setBackDistance(back);
    clip.setCapability(Clip.ALLOW_BACK_DISTANCE_WRITE);
    clip.setApplicationBounds(worldBounds);
    scene.addChild(clip); Clip  // Noduri
   private Clip clip = null;
   private LinearFog fog = null;
   private Background background = null;

// Campuri
  Color3f color = (Color3f) colors[currentColor].value;
    float front = ((Float) fronts[currentFront].value).floatValue();
    float back = ((Float) backs[currentBack].value).floatValue();

// Granita de influenta
    BoundingSphere worldBounds = new BoundingSphere
(new Point3d(0.0, 0.0, 0.0), // Centru
         1000.0); // Raza

// Creaza grupul scenei
    Group scene = new Group(); Clase Folosite O culoare solida
folosita ca fundal Pentru evitarea generarii obiectelor complexe la o distanta la care se pierd detaliile
Folosirea unei culori
Folosirea unei simple texturi – a unei imagini Fundaluri Metoda Z-Buffer Eliminarea Suprafetelor
din Spate Detectarea Suprafetelor din Spate
Combinata cu Metoda Z-Buffer Exemplu:







Suprafete din spate: A, B, D, F
Suprafete din fata: C, E, G, H Determinarea Suprafetelor din Spate Exista 3 posibilitati:
V*N > 0 – suprafata din spate
V*N < 0 – suprafata frontala
V*N = 0 – pe directia de vizualizare Determinarea Suprafetelor din Spate Daca V este directia de vizualizare si N este normala pentru fiecare suprafata determinarea suprafetelor din spate si din fata se face folosind semnul lui V*N Determinarea Suprafetelor din Spate Taierea obiectelor care nu sunt vizibile direct pentru a evita generarea lor Determinarea Suprafetelor Vizibile Ascunderea suprafetelor invizibile
Determinarea obiectelor si liniilor vizibile din planul de vizualizare al mediului 3D in functie de o pozitie de vizualizare aleasa Determinarea Supravetelor Vizibile Distanta catre centrul proiectiei este finita
Similar modului de vedere a oamenilor
Marimea obiectelor difera cu distanta Proiectii in Perspectiva Doar o parte a mediului 3D e vizibil la un moment dat
Suport pentru miscarea in mediul 3D
Suport pentru dispozitivele de afisare Vizualizarea scenei Front Distance si Back
Distance apropiate Front Distance si Back
Distance departate Exemplu Ceata Lineara Ceata pe fundal Ceata rara Fara ceata Efectul de ceata Plan de proiectie Observator Latimea ferestrei de vizualizare Planul de proiectie Proiectie paralela ortogonala Mai putin realiste
Liniile paralele raman paralele Proiectii Paralele
Schimbarea imaginii redate de lumea virtuala Schimbarea marimilor ferestrei in lumea reala Lumea Fizica si Lumea Virtuala Ceata neagra Ceata densa Ceata rara Un pic incetosat Exemplu Ceata Exponentiala Proiectia in Perspectiva
(jos) Proiectia Paralela
(sus) Planul taiat
in fata Planul taiat
in spate Plan de
proiectie Planul taiat
in fata Planul taiat
in spate Plan de
proiectie Planul de Proiectie – Taierea Scenei
Aproape toate modelele 3D pot fi împărțite în două categorii.

Solid - Aceste modele definesc volumul obiectului pe care o reprezintă (ca o stâncă). Acestea sunt mult mai realiste, dar mai greu pentru a construi. Modelelor de solide sunt folosite mai ales pentru simulările nonvisual precum simularea medicale și de inginerie, CAD si pentru aplicatii specializate vizuale, cum ar fi ray tracing și geometrie constructivă solide
Shell / limita - aceste modele reprezinta suprafata, de exemplu, limita obiectului, nu volumul său (cum ar fi o coajă de ou infinitezimal subțire). Acestea sunt mai ușor de a lucra cu modele de solide. Aproape toate modelele vizuale utilizate în jocuri și filme sunt modele de shell. Reprezentare Exemplu: cub
double CubeFaces[6][4][3] = {
{{-1,-1,-1}, // fata 0
{ 1,-1,-1},
{ 1,-1, 1},
{-1,-1, 1}},
{{-1, 1, 1}, // fata 1
{ 1, 1, 1},
{ 1, 1,-1},
{-1, 1,-1}},
{{-1,-1, 1}, // fata 2
{ 1,-1, 1},
{ 1, 1, 1},
{-1, 1, 1}},
{{ 1,-1,-1}, // fata 3
{-1,-1,-1},
{-1, 1,-1},
{ 1, 1,-1}},
{{ 1,-1, 1}, // fata 4
{ 1,-1,-1},
{ 1, 1,-1},
{ 1, 1, 1}},
{{-1,-1, 1}, // fata 5
{-1, 1, 1},
{-1, 1,-1},
{-1,-1,-1}}
}; Implementarea modelului poligonal Poligon:
- o regiune din plan mărginită de o colecţie finită de
segmente de dreaptă care formează un circuit închis
simplu.
Fie n puncte în plan (v0, v1, …,vn–1) şi n segmente de dreaptă (e0 = v0v1, e1 = v1v2, …. en–1 = vn–1v0) care conectează perechi de puncte succesive în ordine ciclică, deci inclusiv conexiunea între ultimul punct şi primul punct din listă. Aceste segmente mărginesc un poligon, dacă şi numai dacă:
- intersecţia fiecărei perechi de segmente adiacente în
ordinea ciclică este un singur punct, conţinut de ambele
segemente: ei ∩ ei+1 = vi+1, pentru oricare i = 0,…, n–1.
- segmente neadiacente nu se intersectează: ei ∩ ej = ∅,
pentru orice j ≠ i+1. Reprezentarea poligoanelor Există trei moduri de populare de a reprezenta un model:
Modelare poligonală - Puncte din spațiul 3D, numit nodurile, sunt conectate prin segmente de linie pentru a forma o rețea poligonală.
Modelare Curve - Suprafetele sunt definite prin curbe, care sunt influențate de puncte de control ponderate. Curba urmează (dar nu neapărat interpola) de puncte. Creșterea în greutate pentru un punct va trage mai aproape de curba la acest punct. Tipurile Curve includ neuniform rațională B-spline (NURBS), spline, patch-uri și primitive geometrice
Sculptura digital - Încă o metodă destul de nou de modelare, sculptura 3D a devenit foarte popular în câțiva ani, a fost în jurul valorii de În prezent, există 3 tipuri de sculptura digitale: deplasarea, care este cel mai utilizat pe scară largă în rândul aplicațiilor în acest moment, volumetric și dinamic tessellation.

Modelarea etapă constă în modelarea obiectelor individuale, care sunt ulterior utilizate în scenă.Există o serie de tehnici de modelare, inclusiv:
constructivă solide geometria
suprafețele implicite
compartimentare suprafetelor Procesul de Modelare o tehnică de proiectare, vizualizare şi analiză a modului în care obiectele reale se reprezintă în calculator
Modelare prin:

-suprafaţă de frontieră (modelarea poligonală, modelarea prin:reţele de petice parametrice)
-volum (modelarea prin compunerea obiectelor, modelarea prindivizare spaţială) Modelarea solidelor
Avantaje de modelare 3D prin wireframe exclusiv metodele 2D includ:
Flexibilitate, capacitatea de a modifica unghiurile sau anima imaginile cu randare mai rapidă a schimbărilor;
Ușor de redare, calcul automat și de a face efecte fotorealiste, mai degrabă decât mental vizualizarea sau estimarea;
Fotorealism vremii, mai puține șanse de eroare umană în incurc, exagerează, sau uitând să includă un efect vizual.
Dezavantaje compara cu randare fotorealista 2D poate include o curbă de învățare de software și dificultatea realizării anumite efecte fotorealiste. Unele efecte fotorealiste pot fi realizate cu filtre de redare speciale incluse în software-ul de modelare 3D. Pentru cele mai bune din ambele lumi, alti artisti folosesc o combinatie de modelare 3D, urmată de editarea imaginilor 2D-calculator prestate de modelul 3D. În comparație cu metodele 2D Precizia de reprezentare a modelului
-diferenţa dintre suprafaţa obiectului şi feţele poligonale prin care este aproximat
- numărul mare de poligoane = precizia de reprezentare mai bună = cerinţe de calcul sporite Reprezentarea poliedrelor Tipuri de reprezentare:
- reprezentare ca suprafaţă
(poligoane “pline”)




- reprezentare prin contur
“cadru de sârmă”
(wireframe) Reprezentarea poliedrelor Condiţiile de construcţie corectă:
-condiţiile în care un solid poate fi reprezentat univoc prin suprafaţa care îl mărgineşte
- se definesc pentru suprafeţe de frontieră triangularizate
Triangularizarea unei suprafeţe poliedrale se obţine prin triangularizarea fiecărei feţe poligonale, astfel încât suprafaţa rezultată constă din vârfuri care sunt înconjurate de triunghiuri, fiecare pereche de triunghiuri fiind adiacente de-a lungul unei muchii. Laturile triunghiurilor adiacente unui vârf formează un circuit de segmente, numit link-ul vârfului: Reprezentarea poliedrelor Modelarea şi reprezentarea prin suprafaţa de frontieră = obiectele sunt aproximate prin poliedre şi modelul lor este reprezentat prin suprafaţa poliedrului, compusă dintr-o colecţie de poligoane
Suprafaţa de frontieră a unui poliedru conţine trei tipuri de elemente geometrice: vârfurile (punctele), care sunt zerodimensionale, muchiile (segmentele), care sunt unidimensionale şi feţele (poligoanele), care sunt bidimensionale Reprezentarea poliedrelor Un poligon:
conţine n vârfuri şi n muchii
muchiile sunt orientate, astfel încât formează un ciclu (circuit închis) = orientare consistentă (dacă se parcurg muchiile în sensul lor de definiţie, interiorul poligonului este văzut întotdeauna în partea stângă/dreaptă). Reprezentarea poligoanelor Modelarea prin divizare spaţială: obiectele sunt încorporate în spaţiu, prin atribuirea unei etichete fiecărui element spaţial, în funcţie de obiectul care ocupa elementul respectiv. Metodele de modelare si reprezentare a obiectelor Modelarea prin reţele de petice parametrice bicubice (bicubic parametric patches): obiectele sunt aproximate prin reţele de elemente spaţiale numite petice (patches). Acestea sunt reprezentate prin polinoame cu două variabile parametrice, în mod obişnuit cubice. Metodele de modelare si reprezentare a obiectelor Exemplu: cub
double CubeCoords[8][3]={
{-1,-1, 1},
{ 1,-1, 1},
{ 1,-1,-1},
{-1,-1,-1},
{-1, 1, 1},
{ 1, 1, 1},
{ 1, 1,-1},
{-1, 1,-1}
};
int CubeIndexFace[6][4]={
{3, 2, 1, 0},
{4, 5, 6, 7},
{0, 1, 5, 4},
{2, 3, 7, 6},
{1, 2, 6, 5},
{0, 4, 7, 3}
}; Implementarea modelului poligonal Forma “clasică” de modelare a obiectelor folosită în
grafica pe calculator:
-uşurinţa în modelare
-posibilitatea de redare rapidă a imaginii obiectelor
Reprezentarea poligonală:
- un obiect tridimensional este compus dintr-o colecţie de
feţe, fiecare faţă fiind o suprafaţă plană reprezentată printrun
poligon Modelarea poligonala a obiectelor Geometrie constructivă solide (CSG) este o tehnică folosită în modelarea solidă . Geometrie constructivă solide permite un modelator pentru a crea o suprafață sau un obiect complex, prin utilizarea booleene operatori pentru a combina obiecte. Adesea CSG prezintă un model sau de suprafață care apare vizual complex, dar este, de fapt puțin mai mult decât obiecte ingenios combinate sau decombined. Modelarea prin compunerea obiectelor
(Constructive Solid Geometry - CSG) Modelarea poligonală: obiectele sunt aproximate printr-o reţea de feţe care sunt poligoane planare. Modelarea poligonală Introducere in JAVA 3D Folosing Java 3D API se pot crea elemente de grafica 3D cu efecte destul de spectaculoase.

Java 3D este dezvoltat in cadrul Java Community Process si ruleaza pe baza OpenGL. In exemplul alaturat obiectele grafice sunt incapsulate intr-o scena graf, iar apoi scena poate fi manipulata pentru randare folosind Java 3D. Pe langa suport 3D pentru sunet, API-ul ofera si o implementare foarte puternica, la nivel grafic, a conceptelor programarii orientate obiect, spre deosebire de celelalte API-uri populare de OpenGL sau DirectX. Orice aplicatie in JAVA 3D se desfasoara într-o scena virtuala compusa dintr-o colectie de modele de obiecte tridimensionale. Scena in JAVA 3D Scenele apar sub forma unor structuri arborescente, compuse din noduri reprezentând:
modele 3D
lumini
sunete
fundalul
camera şi multe alte elemente ale scenei. Graful Scenei Ierarhia celor mai importante clase Java 3D folosite. Clasele hasurate sunt abstracte.
Fiecare obiect Locale este radacina a mai multor (de regula doua) subgrafuri care au ca radacina un nod instanta a clasei BranchGroup.

Exista doua categorii diferite de subgrafuri ale scenei :

subgraf de vizualizare (view brench grapf) - specifica parametrii de vizualizare:
proprietatile ecranului
localizarea punctului de observare
alte caracteristici specifice realitatii virtuale (avatari, dispozitive de urmarire a pozitiei observatorului, etc.).

subgraf de continut (content breanch grapf). - specifica continutul scenei virtuale:
obiecte
aspecte
materiale
comportare
lumini, etc. Universul Virtual Un graf al scenei contine o instanta a clasei Virtual Universe. Nu este recomandabil sa se creeze mai multe universuri virtuale.

Fiecare obiect VirtualUniverse contine o lista de obiecte Locale, deci se pot defini mai multe puncte de referinta în universul virtual. Majoritatea aplicatiilor definesc un singur obiect Locale, deci un singur punct de referinta în universul virtual. Univers Virtual Simplu Exemplu de aplicatie Java 3D
import javax.media.j3d.BoundingSphere;
import javax.media.j3d.BranchGroup;
import javax.media.j3d.DirectionalLight;
import javax.vecmath.Color3f;
import javax.vecmath.Point3d;
import javax.vecmath.Vector3f;
import com.sun.j3d.utils.geometry.Sphere;
import com.sun.j3d.utils.universe.SimpleUniverse;

public class Ball {
public Ball() {
// Creaza universul
SimpleUniverse universe = new SimpleUniverse();

// Creaza un BranchGroup care va contine obiectele
BranchGroup group = new BranchGroup();

// Creaza sfera pe care o adauga la grup
Sphere sphere = new Sphere(0.5f);
group.addChild(sphere); // Creaza o lumina rosie care lumineaza de la 100m de la origine
Color3f light1Color = new Color3f(1.8f, 0.1f, 0.1f);
BoundingSphere bounds = new BoundingSphere(new Point3d(0.0, 0.0, 0.0),100.0);
Vector3f light1Direction = new Vector3f(4.0f, -7.0f, -12.0f);
DirectionalLight light1 = new DirectionalLight(light1Color, light1Direction);
light1.setInfluencingBounds(bounds);
group.addChild(light1);

// camera indreptata catre minge
universe.getViewingPlatform().setNominalViewingTransform();

// adauga grupul de obiecte la univers
universe.addBranchGraph(group);
}

public static void main(String[] args) {
Ball ball = new Ball();
}
} In Java 3D sunt definite corpuri 3D primitive care ajuta la crearea unor corpuri mai complexe. Grafica 3D foloseste o reprezentare tridimensionala a figurilor geometrice pornnd de la randarea imaginilor 2D.
Full transcript