I'm trying to get the lights and reflection correct in my program. I have a big sphere, which I can move the the mouse, that should be a light source (LIGHT0), and smaller spheres bouncing around that should reflect the light. I also need a directional light that I can change the direction using the keyboard
first some colors I defined: float whitish[] = {0.8f, 0.8f, 0.8f, 1}; float white[] = {1, 1, 1, 1}; float blackish[] = {0.2f, 0.2f, 0.2f, 1}; float black[] = {0, 0, 0, 1} I create the directional light with gl.glLightfv(GL.GL_LIGHT1, GL.GL_AMBIENT, blackish,0); gl.glLightfv(GL.GL_LIGHT1, GL.GL_SPECULAR, white,0); gl.glLightfv(GL.GL_LIGHT1, GL.GL_DIFFUSE, white,0); gl.glLightfv(GL.GL_LIGHT1, GL.GL_POSITION, spot_position,0); spot_position is initially [ 0, 0, 1, 0] but it can change by pressing the keyboard keys. a key press adds 0.05 to a specific component of the position vector, until it reaches 1, then it resets back to -1 (nothing fancy). The light of the center sphere is: gl.glLightfv(GL.GL_LIGHT0, GL.GL_POSITION, position,0); gl.glLightfv(GL.GL_LIGHT0, GL.GL_AMBIENT, blackish,0); gl.glLightfv(GL.GL_LIGHT0, GL.GL_DIFFUSE, white,0); gl.glLightfv(GL.GL_LIGHT0, GL.GL_SPECULAR, white,0); This light's position is always centered inside my big transparent sphere. w component of the position vector is 1. I have this code to draw the picture in the back gl.glBegin(GL_QUADS); gl.glMaterialfv(GL.GL_FRONT, GL.GL_DIFFUSE, white,0); gl.glMaterialfv(GL.GL_FRONT, GL.GL_SPECULAR, white,0); gl.glMaterialfv(GL.GL_FRONT, GL.GL_SHININESS, white,0); // Back Face gl.glNormal3f(0, 0, 1); gl.glTexCoord2f(texRight, texBottom); gl.glVertex3f(rx2, ry1, rz1); gl.glTexCoord2f(texRight, texTop); gl.glVertex3f(rx2, ry2, rz1); gl.glTexCoord2f(texLeft, texTop); gl.glVertex3f(rx1, ry2, rz1); gl.glTexCoord2f(texLeft, texBottom); gl.glVertex3f(rx1, ry1, rz1); To draw the spheres, I use the following functions: public void drawtriangle(float[] v1, float[] v2, float[] v3) { gl.glBegin(GL.GL_TRIANGLES); gl.glNormal3fv(v1, 0); gl.glVertex3fv(v1, 0); gl.glNormal3fv(v2, 0); gl.glVertex3fv(v2, 0); gl.glNormal3fv(v3, 0); gl.glVertex3fv(v3, 0); gl.glEnd(); } private void subdivideSphere2(float v1[], float v2[], float v3[], long depth) { float v12[] = new float[3]; float v23[] = new float[3]; float v31[] = new float[3]; int i; if (depth==0) { float[] color= {v1[0]*v1[0], v2[1]*v2[1], v3[2]*v3[2], alpha}; gl.glMaterialfv(GL.GL_FRONT, GL.GL_AMBIENT, blackish,0); gl.glMaterialfv(GL.GL_FRONT, GL.GL_DIFFUSE, color,0); gl.glMaterialfv(GL.GL_FRONT, GL.GL_SPECULAR, color,0); gl.glMaterialfv(GL.GL_FRONT, GL.GL_SHININESS, color,0); drawtriangle(v1, v2, v3); return; } for (i = 0; i<3; i++) { v12[i] = v1[i]+v2[i]; v23[i] = v2[i]+v3[i]; v31[i] = v3[i]+v1[i]; } normalize(v12); normalize(v23); normalize(v31); subdivideSphere2(v1, v12, v31, depth-1); subdivideSphere2(v2, v23, v12, depth-1); subdivideSphere2(v3, v31, v23, depth-1); subdivideSphere2(v12, v23, v31, depth-1); } public void drawSphere() { subdivideSphere2(sVdata[0], sVdata[1], sVdata[2], depth); subdivideSphere2(sVdata[0], sVdata[2], sVdata[4], depth); subdivideSphere2(sVdata[0], sVdata[4], sVdata[5], depth); subdivideSphere2(sVdata[0], sVdata[5], sVdata[1], depth); subdivideSphere2(sVdata[3], sVdata[1], sVdata[5], depth); subdivideSphere2(sVdata[3], sVdata[5], sVdata[4], depth); subdivideSphere2(sVdata[3], sVdata[4], sVdata[2], depth); subdivideSphere2(sVdata[3], sVdata[2], sVdata[1], depth); } My problem is, the small spheres aren't reflecting light at all. They are very bright all the time. I can see a little bit of the light being reflected in the green lines of the cube when I move the big sphere closer to them, but no effect at all to the spheres. Also, I can't see any difference when I move the directional light (LIGHT1). I don't see any reflection on the lines of the cube, the big sphere, small spheres or the picture in the back. Below is screenshot of my program. How can I make my spheres not shine, and reflect both the directional light and the light from the big sphere? Any help would be greatly appreciated. Thank you. http://i.imgur.com/fzCRC2K.png |
Free forum by Nabble | Edit this page |