import java.applet.Applet; import java.awt.Graphics; import java.awt.event.ComponentEvent; import java.awt.event.ComponentListener; import java.lang.System; import java.util.Date; // must import jgl.GL.... import jgl.GL; import jgl.GLAUX; public class material extends Applet implements ComponentListener { // must use GL to use jGL..... // and use GLAUX to use the aux functions..... // remember to give GL to initialize GLAUX GL myGL = new GL (); GLAUX myAUX = new GLAUX (myGL); private void myinit () { float ambient [] = {0.0f,0.0f,0.0f,1.0f}; float diffuse [] = {1.0f,1.0f,1.0f,1.0f}; float specular [] = {1.0f,1.0f,1.0f,1.0f}; float position [] = {0.0f,3.0f,2.0f,0.0f}; float lmodel_ambient [] = {0.4f,0.4f,0.4f,1.0f}; float local_view [] = {0.0f}; myGL.glEnable (GL.GL_DEPTH_TEST); myGL.glDepthFunc (GL.GL_LESS); myGL.glLightfv (GL.GL_LIGHT0, GL.GL_AMBIENT, ambient); myGL.glLightfv (GL.GL_LIGHT0, GL.GL_DIFFUSE, diffuse); myGL.glLightfv (GL.GL_LIGHT0, GL.GL_POSITION, position); myGL.glLightModelfv (GL.GL_LIGHT_MODEL_AMBIENT, lmodel_ambient); myGL.glLightModelfv (GL.GL_LIGHT_MODEL_LOCAL_VIEWER, local_view); myGL.glEnable (GL.GL_LIGHTING); myGL.glEnable (GL.GL_LIGHT0); myGL.glClearColor (0.0f, 0.1f, 0.1f, 0.0f); } private void display () { float no_mat[]={0.0f,0.0f,0.0f,1.0f}; float mat_ambient[]={0.7f,0.7f,0.7f,1.0f}; float mat_ambient_color[]={0.8f,0.8f,0.2f,1.0f}; float mat_diffuse[]={0.1f,0.5f,0.8f,1.0f}; float mat_specular[]={1.0f,1.0f,1.0f,1.0f}; float no_shininess[]={0.0f}; float low_shininess[]={5.0f}; float high_shininess[]={100.0f}; float mat_emission[]={0.3f,0.2f,0.2f,0.0f}; Date startTime = new Date (); myGL.glClear (GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT); /* draw sphere in first row, first column * diffuse reflection only; no ambient or specular */ myGL.glPushMatrix (); myGL.glTranslatef (-3.75f, 3.0f, 0.0f); myGL.glMaterialfv (GL.GL_FRONT, GL.GL_AMBIENT, no_mat); myGL.glMaterialfv (GL.GL_FRONT, GL.GL_DIFFUSE, mat_diffuse); myGL.glMaterialfv (GL.GL_FRONT, GL.GL_SPECULAR, no_mat); myGL.glMaterialfv (GL.GL_FRONT, GL.GL_SHININESS, no_shininess); myGL.glMaterialfv (GL.GL_FRONT, GL.GL_EMISSION, no_mat); myAUX.auxSolidSphere (1.0); myGL.glPopMatrix (); /* draw sphere in first row, second column * diffuse and specular reflection; low shininess; no ambient */ myGL.glPushMatrix (); myGL.glTranslatef (-1.25f, 3.0f, 0.0f); myGL.glMaterialfv (GL.GL_FRONT, GL.GL_AMBIENT, no_mat); myGL.glMaterialfv (GL.GL_FRONT, GL.GL_DIFFUSE, mat_diffuse); myGL.glMaterialfv (GL.GL_FRONT, GL.GL_SPECULAR, mat_specular); myGL.glMaterialfv (GL.GL_FRONT, GL.GL_SHININESS, low_shininess); myGL.glMaterialfv (GL.GL_FRONT, GL.GL_EMISSION, no_mat); myAUX.auxSolidSphere (1.0); myGL.glPopMatrix (); /* draw sphere in first row, third column * diffuse and specular reflection; high shininess; no ambient */ myGL.glPushMatrix (); myGL.glTranslatef (1.25f, 3.0f, 0.0f); myGL.glMaterialfv (GL.GL_FRONT, GL.GL_AMBIENT, no_mat); myGL.glMaterialfv (GL.GL_FRONT, GL.GL_DIFFUSE, mat_diffuse); myGL.glMaterialfv (GL.GL_FRONT, GL.GL_SPECULAR, mat_specular); myGL.glMaterialfv (GL.GL_FRONT, GL.GL_SHININESS, high_shininess); myGL.glMaterialfv (GL.GL_FRONT, GL.GL_EMISSION, no_mat); myAUX.auxSolidSphere (1.0); myGL.glPopMatrix (); /* draw sphere in first row, fourth column * diffuse reflection; emission; no ambient or specular reflection */ myGL.glPushMatrix (); myGL.glTranslatef (3.75f, 3.0f, 0.0f); myGL.glMaterialfv (GL.GL_FRONT, GL.GL_AMBIENT, no_mat); myGL.glMaterialfv (GL.GL_FRONT, GL.GL_DIFFUSE, mat_diffuse); myGL.glMaterialfv (GL.GL_FRONT, GL.GL_SPECULAR, no_mat); myGL.glMaterialfv (GL.GL_FRONT, GL.GL_SHININESS, no_shininess); myGL.glMaterialfv (GL.GL_FRONT, GL.GL_EMISSION, mat_emission); myAUX.auxSolidSphere (1.0); myGL.glPopMatrix (); /* draw sphere in second row, first column * ambient and diffuse reflection; no specular */ myGL.glPushMatrix (); myGL.glTranslatef (-3.75f, 0.0f, 0.0f); myGL.glMaterialfv (GL.GL_FRONT, GL.GL_AMBIENT, mat_ambient); myGL.glMaterialfv (GL.GL_FRONT, GL.GL_DIFFUSE, mat_diffuse); myGL.glMaterialfv (GL.GL_FRONT, GL.GL_SPECULAR, no_mat); myGL.glMaterialfv (GL.GL_FRONT, GL.GL_SHININESS, no_shininess); myGL.glMaterialfv (GL.GL_FRONT, GL.GL_EMISSION, no_mat); myAUX.auxSolidSphere (1.0); myGL.glPopMatrix (); /* draw sphere in second row, second column * ambient, diffuse and specular reflection; low shininess */ myGL.glPushMatrix (); myGL.glTranslatef (-1.25f, 0.0f, 0.0f); myGL.glMaterialfv (GL.GL_FRONT, GL.GL_AMBIENT, mat_ambient); myGL.glMaterialfv (GL.GL_FRONT, GL.GL_DIFFUSE, mat_diffuse); myGL.glMaterialfv (GL.GL_FRONT, GL.GL_SPECULAR, mat_specular); myGL.glMaterialfv (GL.GL_FRONT, GL.GL_SHININESS, low_shininess); myGL.glMaterialfv (GL.GL_FRONT, GL.GL_EMISSION, no_mat); myAUX.auxSolidSphere (1.0); myGL.glPopMatrix (); /* draw sphere in second row, third column * ambient, diffuse and specular reflection; high shininess */ myGL.glPushMatrix (); myGL.glTranslatef (1.25f, 0.0f, 0.0f); myGL.glMaterialfv (GL.GL_FRONT, GL.GL_AMBIENT, mat_ambient); myGL.glMaterialfv (GL.GL_FRONT, GL.GL_DIFFUSE, mat_diffuse); myGL.glMaterialfv (GL.GL_FRONT, GL.GL_SPECULAR, mat_specular); myGL.glMaterialfv (GL.GL_FRONT, GL.GL_SHININESS, high_shininess); myGL.glMaterialfv (GL.GL_FRONT, GL.GL_EMISSION, no_mat); myAUX.auxSolidSphere (1.0); myGL.glPopMatrix (); /* draw sphere in second row, fourth column * ambient and diffuse reflection; emission; no specular */ myGL.glPushMatrix (); myGL.glTranslatef (3.75f, 0.0f, 0.0f); myGL.glMaterialfv (GL.GL_FRONT, GL.GL_AMBIENT, mat_ambient); myGL.glMaterialfv (GL.GL_FRONT, GL.GL_DIFFUSE, mat_diffuse); myGL.glMaterialfv (GL.GL_FRONT, GL.GL_SPECULAR, no_mat); myGL.glMaterialfv (GL.GL_FRONT, GL.GL_SHININESS, no_shininess); myGL.glMaterialfv (GL.GL_FRONT, GL.GL_EMISSION, mat_emission); myAUX.auxSolidSphere (1.0); myGL.glPopMatrix (); /* draw sphere in third row, first column * colored ambient and diffuse reflection; no specular */ myGL.glPushMatrix (); myGL.glTranslatef (-3.75f, -3.0f, 0.0f); myGL.glMaterialfv (GL.GL_FRONT, GL.GL_AMBIENT, mat_ambient_color); myGL.glMaterialfv (GL.GL_FRONT, GL.GL_DIFFUSE, mat_diffuse); myGL.glMaterialfv (GL.GL_FRONT, GL.GL_SPECULAR, no_mat); myGL.glMaterialfv (GL.GL_FRONT, GL.GL_SHININESS, no_shininess); myGL.glMaterialfv (GL.GL_FRONT, GL.GL_EMISSION, no_mat); myAUX.auxSolidSphere (1.0); myGL.glPopMatrix (); /* draw sphere in third row, second column * colored ambient, diffuse and specular reflection; low shininess */ myGL.glPushMatrix (); myGL.glTranslatef (-1.25f, -3.0f, 0.0f); myGL.glMaterialfv (GL.GL_FRONT, GL.GL_AMBIENT, mat_ambient_color); myGL.glMaterialfv (GL.GL_FRONT, GL.GL_DIFFUSE, mat_diffuse); myGL.glMaterialfv (GL.GL_FRONT, GL.GL_SPECULAR, mat_specular); myGL.glMaterialfv (GL.GL_FRONT, GL.GL_SHININESS, low_shininess); myGL.glMaterialfv (GL.GL_FRONT, GL.GL_EMISSION, no_mat); myAUX.auxSolidSphere (1.0); myGL.glPopMatrix (); /* draw sphere in third row, third column * colored ambient, diffuse and specular reflection; high shininess */ myGL.glPushMatrix (); myGL.glTranslatef (1.25f, -3.0f, 0.0f); myGL.glMaterialfv (GL.GL_FRONT, GL.GL_AMBIENT, mat_ambient_color); myGL.glMaterialfv (GL.GL_FRONT, GL.GL_DIFFUSE, mat_diffuse); myGL.glMaterialfv (GL.GL_FRONT, GL.GL_SPECULAR, mat_specular); myGL.glMaterialfv (GL.GL_FRONT, GL.GL_SHININESS, high_shininess); myGL.glMaterialfv (GL.GL_FRONT, GL.GL_EMISSION, no_mat); myAUX.auxSolidSphere (1.0); myGL.glPopMatrix (); /* draw sphere in third row, fourth column * colored ambient and diffuse reflection; emission; no specular */ myGL.glPushMatrix (); myGL.glTranslatef (3.75f, -3.0f, 0.0f); myGL.glMaterialfv (GL.GL_FRONT, GL.GL_AMBIENT, mat_ambient_color); myGL.glMaterialfv (GL.GL_FRONT, GL.GL_DIFFUSE, mat_diffuse); myGL.glMaterialfv (GL.GL_FRONT, GL.GL_SPECULAR, no_mat); myGL.glMaterialfv (GL.GL_FRONT, GL.GL_SHININESS, no_shininess); myGL.glMaterialfv (GL.GL_FRONT, GL.GL_EMISSION, mat_emission); myAUX.auxSolidSphere (1.0); myGL.glPopMatrix (); myGL.glFlush (); Date endTime = new Date (); System.out.println ("Run Time : " + (endTime.getTime () - startTime.getTime ()) + " ms"); } public void componentMoved (ComponentEvent e) {} public void componentShown (ComponentEvent e) {} public void componentHidden (ComponentEvent e) {} public void componentResized (ComponentEvent e) { // get window width and height by myself myReshape (getSize ().width, getSize ().height); display (); repaint (); } private void myReshape (int w, int h) { myGL.glViewport (0, 0, w, h); myGL.glMatrixMode (GL.GL_PROJECTION); myGL.glLoadIdentity (); if (w <= (h * 2)) { myGL.glOrtho (-6.0f, 6.0f, -3.0f * ((float)h * 2) / (float)w, 3.0f * ((float)h * 2) / (float)w, -10.0f, 10.0f); } else { myGL.glOrtho (-6.0f * (float)w / ((float)h * 2), 6.0f * (float)w / ((float)h * 2), -3.0f, 3.0f, -10.0f, 10.0f); } myGL.glMatrixMode (GL.GL_MODELVIEW); } public void update (Graphics g) { // skip the clear screen command.... paint (g); } public void paint (Graphics g) { myGL.glXSwapBuffers (g, this); } public void init () { myAUX.auxInitPosition (0, 0, 600, 450); myAUX.auxInitWindow (this); myinit (); // as call auxReshapeFunc() addComponentListener (this); myReshape (getSize ().width, getSize ().height); // call display as call auxMainLoop(display); display (); } }