Računarska grafika-vežbe. 8 JavaFX 3D mreža i tekstura

Similar documents
Mathcad sa algoritmima

Projektovanje paralelnih algoritama II

Geometrija (I smer) deo 3: Linije u ravni

NAPREDNI FIZIČKI PRAKTIKUM 1 studij Matematika i fizika; smjer nastavnički MJERENJE MALIH OTPORA

Računarska grafika. 28. Rasterizacija. Malo matematike. Rasterizacija. Druge korisne formule. Jednačine linije

Matematika 2, ZS 2016/2017

povezuju tačke na četiri različita načina (pravom linijom, splajnom,

Slika 1. Slika 2. Da ne bismo stalno izbacivali elemente iz skupa, mi ćemo napraviti još jedan niz markirano, gde će

Kontinualni lokacijski modeli. Jelena Panić 748/15 Vidosava Antonović 819/15

Zadatci sa ciklusima. Zadatak1: Sastaviti progra koji određuje z ir prvih prirod ih rojeva.

Fraktali - konačno u beskonačnom

Uvod u relacione baze podataka

On the relation between Zenkevich and Wiener indices of alkanes

Red veze za benzen. Slika 1.

(r i F i ) F i = 0. C O = i=1

Modified Zagreb M 2 Index Comparison with the Randi} Connectivity Index for Benzenoid Systems

THE COMPOUND ANGLE IDENTITIES

TEORIJA SKUPOVA Zadaci

MORFOLOGIJA POVRŠINE PRIREDIO ALEKSANDAR MILETIĆ

PH101 Saurabh Basu Class timings (Group II): 9 am-10 am (Wednesdays) 10 am -11 am (Thursdays)

Oracle Spatial Koordinatni sustavi, projekcije i transformacije. Dalibor Kušić, mag. ing. listopad 2010.

CHEMICAL REACTION EFFECTS ON VERTICAL OSCILLATING PLATE WITH VARIABLE TEMPERATURE

ALTERNATIVNI PRISTUPI U IZUČAVANJU RAVANSKIH KRIVIH

Konstrukcija i analiza algoritama

Integrals in cylindrical, spherical coordinates (Sect. 15.7)

AIR CURTAINS VAZDU[NE ZAVESE V H

FTN Novi Sad Katedra za motore i vozila. Drumska vozila Uputstvo za izradu vučnog proračuna motornog vozila. 1. Ulazni podaci IZVOR:

Cyclical Surfaces Created by a Conical Helix

Homogeneous Transformations

ECGR4124 Digital Signal Processing Midterm Spring 2010

Motion in Three Dimensions

ANALYSIS OF INFLUENCE OF PARAMETERS ON TRANSFER FUNCTIONS OF APERIODIC MECHANISMS UDC Života Živković, Miloš Milošević, Ivan Ivanov

Fajl koji je korišćen može se naći na

ANALYTICAL AND NUMERICAL PREDICTION OF SPRINGBACK IN SHEET METAL BENDING

DETERMINATION OF THE EFFECTIVE STRAIN FLOW IN COLD FORMED MATERIAL

Distance Between Ellipses in 2D

A STUDY ON NATURAL CONVECTION HEAT TRANSFER IN COMPLEX BOUNDARIES

an;'. Union One aud lnsopftrabls.'' LOWELL. MICflTGAN, WKDM SDAV, MAY I I is: LOW.NATIONAL 1>AXK ullv tn , ,800.

Winter 2017 Ma 1b Analytical Problem Set 2 Solutions

Conditional stability of Larkin methods with non-uniform grids

KLASIFIKACIJA NAIVNI BAJES. NIKOLA MILIKIĆ URL:

Engineering Notebook

PROBABILISTIC ASSESSMENT OF CALCULATION RESISTANCE MODELS OF COMPOSITE SECTION WITH PARTIAL SHEAR INTERACTION

15) Find UG if FG = 8. 17) Find QE if QU = 30

1 Eigenvalues and eigenvectors

Rešenja zadataka za vežbu na relacionoj algebri i relacionom računu

CLASS XII CBSE MATHEMATICS INTEGRALS

Optimizacija Niza Čerenkovljevih teleskopa (CTA) pomoću Monte Carlo simulacija

6 th INTERNATIONAL CONFERENCE

FOCAL LENGTH DETERMINATION FOR THE 60 cm TELESCOPE AT ASTRONOMICAL STATION VIDOJEVICA

Chapter 4 Number Representations

APPLICATION OF THOMAS-FERMI MODEL TO FULLERENE MOLECULE AND NANOTUBE UDC 547. Yuri Kornyushin

Angular Momentum. Classically the orbital angular momentum with respect to a fixed origin is. L = r p. = yp z. L x. zp y L y. = zp x. xpz L z.

Anti Compton effect (1). A.M.shehada. Division of physics, Sciences college, Damascus university, Syria

EVALUATION OF STRUCTURAL RELIABILITY USING SIMULATION METHODS

Transformation Matrices; Geometric and Otherwise As examples, consider the transformation matrices of the C 3v

Hilbert Inner Product Space (2B) Young Won Lim 2/7/12

Fragment Processor. Textures

Preliminarno ispitivanje sadrž aja slike pomoć u histograma slike koris ć enjem SVM algoritma i neuronske mrež e

A L A BA M A L A W R E V IE W

PROGRAM FOR CALCULATION OF A DEFLECTION OF A UNIFORM LOADED SQUARE PLATE USING GAUSS-SEIDEL METHOD FOR SOLUTION OF POISSON DIFFERENTIAL EQUATION

CONSTRUCTION OF GENERATOR CAPABILITY CURVES USING THE NEW METHOD FOR DETERMINATION OF POTIER REACTANCE

13 Concurrent Programming using Tasks and Services

Multiple Choice. Compute the Jacobian, (u, v), of the coordinate transformation x = u2 v 4, y = uv. (a) 2u 2 + 4v 4 (b) xu yv (c) 3u 2 + 7v 6

(You may need to make a sin / cos-type trigonometric substitution.) Solution.

DNHI Homework 2 Solutions Recursion

Neke osobine popločavanja ravni

( ) = x( u, v) i + y( u, v) j + z( u, v) k

An Algorithm for Computation of Bond Contributions of the Wiener Index

Pojačavanje konceptualnog razumevanja tangente uz pomoć Web tehnologija

5 th INTERNATIONAL CONFERENCE Contemporary achievements in civil engineering 21. April Subotica, SERBIA

PRIMENA ALGORITAMA ZA DETEKCIJU REFERENTNIH ELEMENATA OBJEKATA U VIDEO SEKVENCI

( ) Trigonometric identities and equations, Mixed exercise 10

PLUMBING SYMBOLS LEGEND

ZANIMLJIV NAČIN IZRAČUNAVANJA NEKIH GRANIČNIH VRIJEDNOSTI FUNKCIJA. Šefket Arslanagić, Sarajevo, BiH

LINEARNI MODELI STATISTIČKI PRAKTIKUM 2 2. VJEŽBE

DISTRIBUIRANI ALGORITMI I SISTEMI

ECGR4124 Digital Signal Processing Exam 2 Spring 2017

DYNAMIC HEAT TRANSFER IN WALLS: LIMITATIONS OF HEAT FLUX METERS

Modeling of a Trebuchet with a Sling and Counterweight

Solutions to Sample Questions for Final Exam

Konstrukcija i analiza algoritama

Rayleigh-Bénard convection with magnetic field

ATOMSKA APSORP SORPCIJSKA TROSKOP

Practice 14. imathesis.com By Carlos Sotuyo

ECGR4124 Digital Signal Processing Final Spring 2009

S10.G.1. Fluid Flow Around the Brownian Particle

1 Основни појмови егзактно посредног претраживања Релаксација и рестрикција

2.004: MODELING, DYNAMICS, & CONTROL II Spring Term 2003

APPLICATION OF FUZZY LOGIC FOR REACTIVE POWER COMPENSATION BY SYNCHRONOUS MOTORS WITH VARIABLE LOAD

Equations with regular-singular points (Sect. 5.5).

Rotations about the coordinate axes are easy to define and work with. Rotation about the x axis by angle θ is. R x (θ) = 0 cos θ sin θ 0 sin θ cos θ

1. COMPLEX NUMBERS. z 1 + z 2 := (a 1 + a 2 ) + i(b 1 + b 2 ); Multiplication by;

Lecture 36 Date:

Lecture 5: Sep. 23 &25

NAPREDNI FIZIČKI PRAKTIKUM II studij Geofizika POLARIZACIJA SVJETLOSTI

R. Ravaud and G. Lemarquand Laboratoire d Acoustique de l Universite du Maine UMR CNRS 6613, Le Mans, France

STRUCTURAL VEHICLE IMPACT LOADING UDC =111. Dragoslav Stojić #, Stefan Conić

with any accuracy. The parameter a of cubic substances is directly proportional to the spacing d of any particular set of lattice planes:

Transcription:

Računarska grafika-vežbe 8 JavaFX 3D mreža i tekstura

Zadatak 1: Mreža kruga Formirati trougaonu mrežu kruga poluprečnika R i N podela kružnice, u X-Z ravni, sa centrom u koordinatnom početku, a zatim formirati krug opisan datom trougaonom mrežom kao 3D objekat i prikazati ga perspektivnom kamerom u obliku mreže (žični model) i popunjeno (neproziran objekat) koristeći najpre difuznu boju, a zatim teksturu sa priložene slike. Priložen je očekivani izgled kruga za broj podela N=15, za sliku perspektivne kamere sa lampom na nosaču rotiranom oko X-ose za ugao -80 i materijalom kruga sa mapom difuzije na osnovu priložene slike i odrazom belog svetla snage 150: 19.04.2017. JavaFX 3D - mreža i tekstura 2

Rešenje: Mreža kruga (1/10) Koordinate temena na kružnici: dobijaju se na osnovu parametarskih jednačina kruga krugjeuxozravini: x=r*cos(ϕ) y=0 z=r*sin(ϕ) Trougaona mreža se formira od trouglova: zajedničko teme(v0) u centru kružnice po2temena(v i,v i+1 )nakružnici,podeljenojnandelova lica: v0,v1,v2; v0,v2,v3; v0,v3,v1 naličja: v0,v2,v1; v0,v3,v2; v0,v1,v3 z R sinθ θ R cosθ V0 x V1 V2 V3 V1 19.04.2017. JavaFX 3D - mreža i tekstura 3

Rešenje: Mreža kruga (2/10)... import javafx.scene.shape.meshview; import javafx.scene.shape.trianglemesh; import javafx.scene.shape.drawmode; import javafx.scene.shape.cullface; import javafx.scene.paint.phongmaterial; import javafx.scene.paint.color; import javafx.scene.perspectivecamera; import javafx.scene.pointlight; import javafx.scene.transform.rotate; import javafx.event.eventhandler; import javafx.scene.input.mouseevent; import javafx.scene.input.scrollevent; import javafx.scene.image.image; 19.04.2017. JavaFX 3D - mreža i tekstura 4

Rešenje: Mreža kruga (3/10) public class Krug1 extends Application { public static final int R = 100; public static final int N = 15; private static final double DALJA_ODSECAJUĆA_RAVAN = 2000.0; private static final double POČETNO_RASTOJANJE_KAMERE = -400.0; private static final double POČETNI_UGAO_KAMERE = -80; private static final double ŠIRINA_SCENE = 400; private static final double VISINA_SCENE = 400; private final Rotate rx = new Rotate(); private final Rotate ry = new Rotate(); private final Rotate rz = new Rotate(); private double pozx; private double pozy; private double starapozx; private double starapozy; private PerspectiveCamera kamera; 19.04.2017. JavaFX 3D - mreža i tekstura 5

Rešenje: Mreža kruga(4/10) private MeshView napravipovrš(float r, int n) { float[] temena = new float[3*(n+1)]; temena[0] = 0f; temena[1] = 0f; temena[2] = 0f; // indeksi temena, teksturnih koordinata i stranica int iv = 3, it = 0, is = 0; double deltaugao = 2*Math.PI/n; double ugao=0.0; for (int i=0; i<n; i++) { temena[iv++]=(float)(r*math.cos(ugao)); temena[iv++]=0; temena[iv++]=(float)(r*math.sin(ugao)); ugao+=deltaugao; 19.04.2017. JavaFX 3D - mreža i tekstura 6

Rešenje: Mreža kruga(5/10) // Teksturne koordinate preko skale boja float[] tekstura = { 0.1f, 0.5f, // 0 crvena 0.3f, 0.5f, // 1 zelena 0.5f, 0.5f, // 2 plava 0.7f, 0.5f, // 3 žuta 0.9f, 0.5f // 4 narandžasta ; 19.04.2017. JavaFX 3D - mreža i tekstura 7

Rešenje: Mreža kruga(6/10) // Stranice int[] stranice = new int [12*n]; iv=1; for (int i=0; i<n; i++) { // lice stranice[is++]=0; stranice[is++]=it; stranice[is++]=iv; stranice[is++]=it; stranice[is++]=(iv+1)%(n+1)!=0?iv+1:1; stranice[is++]=it; //naličje stranice[is++]=0; stranice[is++]=it; stranice[is++]=(iv+1)%(n+1)!=0?iv+1:1; stranice[is++]=it; stranice[is++]=iv; stranice[is++]=it; iv++; // indeks temena it=(it+1)%(tekstura.length/2); // indeks teksture 19.04.2017. JavaFX 3D - mreža i tekstura 8

Rešenje: Mreža kruga(7/10) TriangleMesh mreža = new TriangleMesh(); mreža.getpoints().addall(temena); mreža.gettexcoords().addall(tekstura); mreža.getfaces().addall(stranice); MeshView površ = new MeshView(); površ.setmesh(mreža); PhongMaterial mat = new PhongMaterial(); mat.setdiffusecolor(color.orange); // mat.setdiffusemap(new Image("skalaboja.png")); mat.setspecularpower(150); površ.setmaterial(mat); // površ.setdrawmode(drawmode.line); // površ.setcullface(cullface.front); return površ; 19.04.2017. JavaFX 3D - mreža i tekstura 9

Rešenje: Mreža kruga(8/10) private Group napravikamerunanosačusalampom(){ kamera = new PerspectiveCamera(true); kamera.setfarclip(dalja_odsecajuća_ravan); kamera.settranslatez(početno_rastojanje_kamere); PointLight lampa = new PointLight(); lampa.setcolor(color.white); lampa.settranslatex(kamera.gettranslatex()); lampa.settranslatey(kamera.gettranslatey()); lampa.settranslatez(kamera.gettranslatez()); Group nosač = new Group(kamera, lampa); rx.setaxis(rotate.x_axis); rx.setangle(početni_ugao_kamere); ry.setaxis(rotate.y_axis); ry.setangle(0); rz.setaxis(rotate.z_axis); rz.setangle(0); nosač.gettransforms().addall(rz, ry, rx); return nosač; 19.04.2017. JavaFX 3D - mreža i tekstura 10

Rešenje: Mreža kruga(9/10) private void obradadogađaja(scene scena) { // obrada događaja miša i točkića miša //... scena.addeventhandler(mouseevent.mouse_pressed, r1); scena.addeventhandler(mouseevent.mouse_dragged, r2); scena.addeventhandler(scrollevent.scroll, r3); private Scene napraviscenu(group koren) { SceneAntialiasing glatko=sceneantialiasing.balanced; Scene scena = new Scene(koren, ŠIRINA_SCENE, VISINA_SCENE, true, glatko); scena.setcamera(kamera); obradadogađaja(scena); return scena; 19.04.2017. JavaFX 3D - mreža i tekstura 11

Rešenje: Mreža kruga(10/10) private Group napravigrafscene(){ MeshView krug=napravipovrš(r,n); Group nosač = napravikamerunanosačusalampom(); Group graf = new Group(krug,nosač); return graf; @Override public void start(stage prozor) { Group koren = napravigrafscene(); Scene scena = napraviscenu(koren); prozor.settitle("krug"); prozor.setscene(scena); prozor.show(); public static void main(string[] args) { launch(args); 19.04.2017. JavaFX 3D - mreža i tekstura 12

Rezultat: Mreža kruga Problem: 19.04.2017. JavaFX 3D - mreža i tekstura 13

2. Rešenje: Mreža kruga (1/9) Trougaona mreža kruga se formira na sledeći način: od trouglova koje obrazuje N tačaka na svakoj od koncentričnih kružnica sa poluprečnicima R/N izuzev trouglova koje obrazuju tačke na kružnici sa najmanjim poluprečnikom i centrom kruga V0 centar V1 V2 V3 V1 V4 V5 V6 V4 koncentrične kružnice V7 V8 V9 V7 19.04.2017. JavaFX 3D - mreža i tekstura 14

2. Rešenje: Mreža kruga (2/9) Indeksi temena na stranicama koje čine trouglovi sa temenom u centru kružnice određuju se kao u prethodnom rešenju: lica: 0,1,2; 0,2,3;...; 0,n,1 naličja: 0,2,1; 0,3,2;...; 0,1,n Indeksi temena na koncentričnom kružnicama: indeks temena u posmatranom pravougaoniku je p i, gde se i kodira na osnovu binarnog dvocifrenog broja prva binarna cifra (koordinata) odgovara pravcu horizontalne ose (indeks tačke na kružnici) druga cifra pravcu vertikalne ose (indeks kružnice) p0 p0 (p00 2 ), p1 (p01 2 ), p2(p10 2 ), p3(p11 2 ) p2 p1 p3 19.04.2017. JavaFX 3D - mreža i tekstura 15

2. Rešenje: Mreža kruga (3/9) for (int i = 0; i < n-1; i++) {// i: indeks kružnice for (int j = 0; j < n; j++) {// j: indeks tačke na i-toj kružnici p0 = i * n + j; p = p0 + 1; p1= p%n!= 0? p : p-n; p2 = p0 + n; p = p2 + 1; p3= p%n!= 0? p : p-n; p0++; p1++; p2++; p3++; //gornji trougao, lice: p2,p1,p0 //gornji trougao, naličje: p0,p1,p2 //donji trougao, lice: p1,p2,p3 //donji trougao, naličje: p3,p2,p1 V0 V1 V2 V3 V1 V4 V5 V6 V4 V7 V8 V9 V7 p0 p1 p2 p3 19.04.2017. JavaFX 3D - mreža i tekstura 16

2. Rešenje: Mreža kruga (4/9) private MeshView napravipovrš(float rkruga, int n) { float[] temena = new float[3*(n*n+1)]; temena[0] = 0f; temena[1] = 0f; temena[2] = 0f; // centar int iv = 3, it = 0, is = 0; float deltar = rkruga/n; double deltaugao = 2 *Math.PI/n; float r=deltar; for (int i=0; i<n; i++) { // i - indeks kružnice double ugao=0.0; for (int j=0; j<n; j++) { // j - indeks temena na kružnici temena[iv++]=(float)(r*math.cos(ugao)); // x temena[iv++]=0; // y temena[iv++]=(float)(r*math.sin(ugao)); // z ugao+=deltaugao; r+=deltar; 19.04.2017. JavaFX 3D - mreža i tekstura 17

2. Rešenje: Mreža kruga (5/9) // Teksturne koordinate preko skale boja float[] tekstura = { 0.1f, 0.5f, // 0 crvena 0.3f, 0.5f, // 1 zelena 0.5f, 0.5f, // 2 plava 0.7f, 0.5f, // 3 žuta 0.9f, 0.5f // 4 narandžasta ; int[] stranice = new int [12*(n+(n-1)*n*2)]; // 24*n*n-12*n iv=1; 19.04.2017. JavaFX 3D - mreža i tekstura 18

2. Rešenje: Mreža kruga (6/9) for (int i=0; i<n; i++) { // lice stranice[is++]=0; stranice[is++]=it; stranice[is++]=iv; stranice[is++]=it; stranice[is++]=(iv+1)%(n+1)!=0?iv+1:1; stranice[is++]=it; // naličje stranice[is++]=0; stranice[is++]=it; stranice[is++]=(iv+1)%(n+1)!=0?iv+1:1; stranice[is++]=it; stranice[is++]=iv; stranice[is++]=it; iv++; it=(it+1)%(tekstura.length/2); // indeks teksture 19.04.2017. JavaFX 3D - mreža i tekstura 19

2. Rešenje: Mreža kruga (7/9) int p0, p1, p2, p3; // indeksi temena četvorougla: GL,GD,DL,DD int p; // pomoćna promenljiva za izračunavanje indeksa int t0 = 0, t1 = 0, t2 = 0, t3 = 0; // indeksi teksturnih tačaka for (int i = 0; i < n-1; i++) { // i - indeks kružnice for (int j = 0; j < n; j++) { // j - indeks tačke na kružnici p0 = i * n + j; p = p0 + 1; p1= p%n!= 0? p : p-n; p2 = p0 + n; p = p2+1; p3= p%n!= 0? p : p-n; p0++; p1++; p2++; p3++; t0=t1=t2=t3=it; 19.04.2017. JavaFX 3D - mreža i tekstura 20

2. Rešenje: Mreža kruga (8/9) //gornji trougao, lice stranice[is++] = p2; stranice[is++] = t2; stranice[is++] = p1; stranice[is++] = t1; stranice[is++] = p0; stranice[is++] = t0; //gornji trougao, naličje stranice[is++] = p0; stranice[is++] = t0; stranice[is++] = p1; stranice[is++] = t1; stranice[is++] = p2; stranice[is++] = t2; 19.04.2017. JavaFX 3D - mreža i tekstura 21

2. Rešenje: Mreža kruga (9/9) //donji trougao, lice stranice[is++] = p1; stranice[is++] = t1; stranice[is++] = p2; stranice[is++] = t2; stranice[is++] = p3; stranice[is++] = t3; //donji trougao, naličje stranice[is++] = p3; stranice[is++] = t3; stranice[is++] = p2; stranice[is++] = t2; stranice[is++] = p1; stranice[is++] = t1; it=(it+1)%(tekstura.length/2); // indeks teksture // Preostali deo metoda je isti kao i u prethodnom rešenju 19.04.2017. JavaFX 3D - mreža i tekstura 22

2. Rezultat: Mreža kruga Ne postoji problem sa odrazom, ali je mreža značajno kompleksnija: 19.04.2017. JavaFX 3D - mreža i tekstura 23

Zadatak 2: Mreža torusa Formirati trougaonu mrežu torusa čija je srednja linija u ravni X-O-Y, sa centrom u koordinatnom početku. Zadati su poluprečnik kružnice srednje linije torusa R i poluprečnik kružnice poprečnog preseka r, kao i brojevi podela po srednjoj liniji torusa i kružnici poprečnog preseka, nu i np, respektivno. Koristiti sliku iz prethodnog zadatka za teksturu torusa. Priložen je očekivani izgled torusa: 19.04.2017. JavaFX 3D - mreža i tekstura 24

Rešenje: Mreža torusa (1/7) Koordinate temena mreže torusa su: x=(r+r cosφ) cosθ y=(r+r cosφ) sinθ z=r sinφ R sinθ R cosθ θ x z r sinφ φ r cosφ x gde su: y R poluprečnik kružnice koja predstavlja srednju liniju torusa r poluprečnik poprečnog preseka torusa θ ugao otklona do poprečnog preseka na kružnici srednje linija torusa φ ugao otklona do temena na kružnici poprečnog preseka 19.04.2017. JavaFX 3D - mreža i tekstura 25

Rešenje: Mreža torusa (2/7) Mreža torusa se formira na osnovu mreže pravougaonika svaki pravougaonik je podeljen glavnom dijagonalom na 2 trougla Razmotana mreža torusa, posmatrana iznutra : V0 V3 V6 V9 V4 V7 V10 V1 V5 V8 V11 V2 V0 V3 V6 V9 U v i i-to teme u vektoru temena U uzdužna osa mreže (odgovara srednjoj liniji) P poprečna osa mreže (odgovara kružnici poprečnog preseka) V0 P V1 V2 V0 nu broj podela po U osi (nu=3) np broj podela po P osi (np=4) 19.04.2017. JavaFX 3D - mreža i tekstura 26

Rešenje: Mreža torusa (3/7) Lica trouglova: gornji: p0, p1, p2 donji: p3, p2, p1 p0 p2 p1 p3 V0 V3 V6 V9 V0 P V1 V4 V7 V10 V1 V2 V5 V8 V11 V2 V0 U V3 V6 V9 V0 for (int i = 0; i < np; i++) { // i: indeks tačke na preseku for (int j = 0; j < nu; j++) { // j: indeks poprečnog preseka p0 = i * nu + j; p = p0+1; p1= p%nu!= 0? p : p-nu; p = p0 + nu; p2 = p < np * nu? p : j; p = p2+1; p3= p%nu!= 0? p : p-nu; // određivanje trouglova u mreži na osnovu p0,p1,p2 i p3 19.04.2017. JavaFX 3D - mreža i tekstura 27

Rešenje: Mreža torusa (4/7) /* Prerađen metod autora J.Pereda * FXyzLib/src/org/fxyz/shapes/primitives/TorusMesh.java */ private MeshView napravitorus( int nu, // broj podela po uzdužnoj srednjoj liniji cevi torusa int np, // broj podela kružnice poprečnog preseka cevi torusa float R, // poluprečnik uzdužne srednje linije cevi torusa float r) { // poluprečnik kružnice poprečnog preseka cevi torusa float[] temena = new float[np * nu * 3]; int[] stranice = new int [np * nu * 12]; // bez naličja int iv = 0, it = 0, is = 0; // indeksi u nizovima tem.,tek.,str. int p0, p1, p2, p3; // indeksi temena tekućeg četvorougla int p; // pomoćna promenljiva za izračunavanje indeksa int t0 = 0, t1 = 0, t2 = 0, t3 = 0; // indeksi teksturnih tačaka 19.04.2017. JavaFX 3D - mreža i tekstura 28

Rešenje: Mreža torusa (5/7) // temena for (int ip = 0; ip < np; ip++) { // ip - po temenu preseka float φ = ip * 2.0f * (float)math.pi/np; for (int iu = 0; iu < nu; iu++) { // iu - po presecima float θ = iu * 2.0f * (float)math.pi/nu; temena[iv++] = (float)((r + r*math.cos(φ))*math.cos(θ)); // x temena[iv++] = (float)((r + r*math.cos(φ))*math.sin(θ)); // y temena[iv++] = (float)(r* Math.sin(φ)); // z // teksturne koordinate kao u prethodnom zadatku 19.04.2017. JavaFX 3D - mreža i tekstura 29

Rešenje: Mreža torusa (6/7) //stranice for (int i = 0; i < np; i++) { // i - indeks na poprečnom preseku for (int j = 0; j < nu; j++) { // j - indeks poprečnog preseka p0 = i * nu + j; p = p0 + 1; p1= p%nu!= 0? p : p-nu; // p1= p%nu!= 0? p : i*nu; // alternativa p = p0 + nu; p2 = p < np*nu? p : j; // p2 = p < np * nu? p : p%np; // alternativa p = p2 + 1; p3= p%nu!= 0? p : p-nu; // p3= p%nu!= 0? p : (i+1)%np*nu; // alternativa t0=t1=t2=t3=it; 19.04.2017. JavaFX 3D - mreža i tekstura 30

Rešenje: Mreža torusa (7/7) // Gornji trougao, lice stranice[is++] = p0; stranice[is++] = t0; stranice[is++] = p1; stranice[is++] = t1; stranice[is++] = p2; stranice[is++] = t2; // Donji trougao, lice stranice[is++] = p3; stranice[is++] = t3; stranice[is++] = p2; stranice[is++] = t2; stranice[is++] = p1; stranice[is++] = t1; it=(it+1)%(tekstura.length/2); // Preostali deo koda kao u prethodnom zadatku 19.04.2017. JavaFX 3D - mreža i tekstura 31

Rezultat: Mreža torusa Perspektivna kamera sa lampom na nosaču rotiranom oko Y-ose za ugao = -45 i oko X-ose za ugao = -30 Materijal ima refleksivnost snage 150. 19.04.2017. JavaFX 3D - mreža i tekstura 32