Note that there are some explanatory texts on larger screens.

plurals
  1. POJOGL correct light and reflection in spheres
    primarykey
    data
    text
    <p>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</p> <p>first some colors I defined:</p> <pre><code>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} </code></pre> <p>I create the directional light with</p> <pre><code>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); </code></pre> <p>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).</p> <p>The light of the center sphere is:</p> <pre><code>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); </code></pre> <p>This light's position is always centered inside my big transparent sphere. w component of the position vector is 1.</p> <p>I have this code to draw the picture in the back</p> <pre><code>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); </code></pre> <p>To draw the spheres, I use the following functions:</p> <pre><code>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&lt;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); } </code></pre> <p>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.</p> <p><img src="https://i.imgur.com/fzCRC2K.png" alt="My program"></p>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload