{"id":46,"date":"2015-03-18T11:58:14","date_gmt":"2015-03-18T10:58:14","guid":{"rendered":"http:\/\/liceocuneo.it\/grafica\/?page_id=46"},"modified":"2015-11-11T19:18:29","modified_gmt":"2015-11-11T18:18:29","slug":"illuminazione","status":"publish","type":"page","link":"https:\/\/liceocuneo.it\/grafica\/illuminazione\/","title":{"rendered":"Illuminazione"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-64\" src=\"https:\/\/liceocuneo.it\/grafica\/wp-content\/uploads\/sites\/43\/Solidi.png\" alt=\"Solidi\" width=\"416\" height=\"336\" srcset=\"https:\/\/liceocuneo.it\/grafica\/wp-content\/uploads\/sites\/43\/Solidi.png 416w, https:\/\/liceocuneo.it\/grafica\/wp-content\/uploads\/sites\/43\/Solidi-300x242.png 300w\" sizes=\"auto, (max-width: 416px) 100vw, 416px\" \/><\/p>\n<p>In questo primo esempio tridimensionale vengono utilizzati i solidi predefiniti\u00a0della libreria GLUT. Viene impostata una sorgente di luce e le caratteristiche del materiale degli oggetti. Per capire il funzionamento dei parametri per la luce e i materiali o l&#8217;effetto delle trasformazioni geometriche \u00e8 utile provare a modificare i valori numerici.\u00a0Se si avvia l&#8217;animazione i solidi ruotano tutti intorno al proprio asse x.<\/p>\n<p>Per i dettagli fare riferimento a:\u00a0<a href=\"http:\/\/www3.ntu.edu.sg\/home\/ehchua\/programming\/\">Computer Graphics with OpenGL<\/a><\/p>\n<ul>\n<li><a href=\"http:\/\/www3.ntu.edu.sg\/home\/ehchua\/programming\/opengl\/CG_Introduction.html\">CG 1. Introduction to OpenGL<\/a><\/li>\n<li><a href=\"http:\/\/www3.ntu.edu.sg\/home\/ehchua\/programming\/opengl\/CG_BasicsTheory.html\">CG 2. Computer Graphics &#8211; Basic Theory<\/a><\/li>\n<li><a href=\"http:\/\/www3.ntu.edu.sg\/home\/ehchua\/programming\/opengl\/CG_Examples.html\">CG 3. OpenGL Examples<\/a><\/li>\n<li><a href=\"http:\/\/www3.ntu.edu.sg\/home\/ehchua\/programming\/opengl\/References_OpenGL.html\">References &amp; Resources<\/a><\/li>\n<\/ul>\n<p><strong>GLRenderer.java<\/strong><\/p>\n<pre>public class GLRenderer implements GLEventListener {\r\n\r\n    float a = 0.0f;\r\n\r\n    @Override\r\n    public void init(GLAutoDrawable drawable) {\r\n        GL2 gl = drawable.getGL().getGL2();\r\n\r\n        float[] ambiente = new float[]{1, 1, 1, 1};\r\n        float[] diffusa = new float[]{1, 1, 1, 1};\r\n        float[] speculare = new float[]{1, 1, 1, 1};\r\n        float[] posizione = new float[]{0, 10, 10, 1};\r\n\r\n        \/\/ imposta le caratteristiche della sorgente di luce 0\r\n        gl.glLightfv(GL2.GL_LIGHT0, GL2.GL_AMBIENT, ambiente, 0);\r\n        gl.glLightfv(GL2.GL_LIGHT0, GL2.GL_DIFFUSE, diffusa, 0);\r\n        gl.glLightfv(GL2.GL_LIGHT0, GL2.GL_SPECULAR, speculare, 0);\r\n        gl.glLightfv(GL2.GL_LIGHT0, GL2.GL_POSITION, posizione, 0);\r\n        \/\/ attiva la sorgente di luce 0\r\n        gl.glEnable(GL2.GL_LIGHT0);\r\n        \/\/ attiva l'iluminazione\r\n        gl.glEnable(GL2.GL_LIGHTING);\r\n        \/\/ attiva il test di profondit\u00e0 per disegnare solo parti visibili\r\n        gl.glEnable(GL2.GL_DEPTH_TEST);\r\n        \/\/ imposta il colore di sfondo\r\n        gl.glClearColor(0, 0, 0.1f, 0);\r\n    }\r\n\r\n    @Override\r\n    public void dispose(GLAutoDrawable drawable) {\r\n    }\r\n\r\n    @Override\r\n    public void display(GLAutoDrawable drawable) {\r\n        GL2 gl = drawable.getGL().getGL2();\r\n        GLUT glut = new GLUT();\r\n\r\n        \/\/ cancella l'immagine e il buffer per il test di profondit\u00e0\r\n        gl.glClear(GL2.GL_COLOR_BUFFER_BIT | GL2.GL_DEPTH_BUFFER_BIT);\r\n\r\n        \/\/ cono\r\n        gl.glLoadIdentity();\r\n        gl.glTranslatef(-6, 4, 0);\r\n        gl.glRotatef(a, 1, 0, 0);\r\n        glut.glutSolidCone(1, 2, 36, 10);\r\n\r\n        \/\/cubo\r\n        gl.glLoadIdentity();\r\n        gl.glTranslatef(-2, 4, 0);\r\n        gl.glRotatef(a, 1, 0, 0);\r\n        glut.glutSolidCube(2);\r\n\r\n        \/\/ cilindro\r\n        gl.glLoadIdentity();\r\n        gl.glTranslatef(2, 4, 0);\r\n        gl.glRotatef(a, 1, 0, 0);\r\n        glut.glutSolidCylinder(1, 2, 36, 10);\r\n\r\n        \/\/ dodecaedro\r\n        gl.glLoadIdentity();\r\n        gl.glTranslatef(6, 4, 0);\r\n        gl.glRotatef(a, 1, 0, 0);\r\n        glut.glutSolidDodecahedron();\r\n\r\n        \/\/ icosaedro\r\n        gl.glLoadIdentity();\r\n        gl.glTranslatef(-6, 0, 0);\r\n        gl.glRotatef(a, 1, 0, 0);\r\n        glut.glutSolidIcosahedron();\r\n\r\n        \/\/ ottaedro\r\n        gl.glLoadIdentity();\r\n        gl.glTranslatef(-2, 0, 0);\r\n        gl.glRotatef(a, 1, 0, 0);\r\n        glut.glutSolidOctahedron();\r\n\r\n        \/\/ rombidodecaedro\r\n        gl.glLoadIdentity();\r\n        gl.glTranslatef(2, 0, 0);\r\n        gl.glRotatef(a, 1, 0, 0);\r\n        glut.glutSolidRhombicDodecahedron();\r\n\r\n        \/\/ sfera\r\n        gl.glLoadIdentity();\r\n        gl.glTranslatef(6, 0, 0);\r\n        gl.glRotatef(a, 1, 0, 0);\r\n        glut.glutSolidSphere(1, 36, 18);\r\n\r\n        \/\/ teiera vista dall'alto\r\n        gl.glLoadIdentity();\r\n        gl.glTranslatef(-6, -4, 0);\r\n        gl.glRotatef(a, 1, 0, 0);\r\n        glut.glutSolidTeapot(1, false);\r\n\r\n        \/\/ teiera vista di fianco\r\n        gl.glLoadIdentity();\r\n        gl.glTranslatef(-2, -4, 0);\r\n        gl.glRotatef(a, 1, 0, 0);\r\n        glut.glutSolidTeapot(1, true);\r\n\r\n        \/\/ tetraedro\r\n        gl.glLoadIdentity();\r\n        gl.glTranslatef(2, -4, 0);\r\n        gl.glRotatef(a, 1, 0, 0);\r\n        glut.glutSolidTetrahedron();\r\n\r\n        \/\/ toro\r\n        gl.glLoadIdentity();\r\n        gl.glTranslatef(6, -4, 0);\r\n        gl.glRotatef(a, 1, 0, 0);\r\n        glut.glutSolidTorus(0.5, 1, 36, 36);\r\n\r\n        \/\/ incrementa l'angolo di rotazione di 1\u00b0\r\n        a += 1.0f;\r\n    }\r\n\r\n    @Override\r\n    public void reshape(GLAutoDrawable drawable, int x, int y, int w, int h) {\r\n        GL2 gl = drawable.getGL().getGL2();\r\n        GLU glu = new GLU();\r\n\r\n        \/\/ imposta la matrice di trasformazione per la proiezione\r\n        gl.glMatrixMode(GL2.GL_PROJECTION);\r\n        gl.glLoadIdentity();\r\n        glu.gluPerspective(45, (float) w \/ h, 5, 50);\r\n        glu.gluLookAt(0, 0, 15, 0, 0, 0, 0, 1, 0);\r\n\r\n        \/\/ imposta la matrice di trasformazione per gli oggetti\r\n        gl.glMatrixMode(GL2.GL_MODELVIEW);\r\n        gl.glLoadIdentity();\r\n    }\r\n\r\n}<\/pre>\n<p>Progetto Eclipse:\u00a0<a href=\"https:\/\/liceocuneo.it\/grafica\/wp-content\/uploads\/sites\/43\/EclipseJOGL.zip\">EclipseJOGL.zip<br \/>\n<\/a>N.B.: \u00c8 probabile che sia\u00a0necessario eliminare la libreria JOGL2 presente nel progetto e sostituirla con quella del proprio Workspace.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In questo primo esempio tridimensionale vengono utilizzati i solidi predefiniti\u00a0della libreria GLUT. Viene impostata una sorgente di luce e le caratteristiche del materiale degli oggetti. Per capire il funzionamento dei parametri per la luce e i materiali o l&#8217;effetto delle &hellip; <a href=\"https:\/\/liceocuneo.it\/grafica\/illuminazione\/\">Continua a leggere<span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":4,"featured_media":0,"parent":0,"menu_order":60,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-46","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/liceocuneo.it\/grafica\/wp-json\/wp\/v2\/pages\/46","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/liceocuneo.it\/grafica\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/liceocuneo.it\/grafica\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/liceocuneo.it\/grafica\/wp-json\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/liceocuneo.it\/grafica\/wp-json\/wp\/v2\/comments?post=46"}],"version-history":[{"count":0,"href":"https:\/\/liceocuneo.it\/grafica\/wp-json\/wp\/v2\/pages\/46\/revisions"}],"wp:attachment":[{"href":"https:\/\/liceocuneo.it\/grafica\/wp-json\/wp\/v2\/media?parent=46"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}