내 프로그램에서 조명과 반사를 올바르게 얻으려고합니다. 저는 마우스를 움직일 수있는 큰 구체를 가지고 있습니다. 마우스는 광원 (LIGHT0)이어야하고 주위를 반사하는 작은 구체는 빛을 반사해야합니다. 제가JOGL 올바른 빛과 구체의 반사
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와 방향성 광을 생성
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}
처음 [0 : I는 I 키보드를 I 정의
제 어떤 색을 사용하여 방향을 바꿀 수있는 집광 필요 , 0, 1, 0]이지만 키보드 키를 눌러 변경할 수 있습니다. 키를 누르면 위치 벡터의 특정 구성 요소에 0.05가 추가되어 1에 도달하면 다시 -1로 되돌려집니다 (아무 것도 표시되지 않음).
중앙 영역의 빛은 다음과 같습니다
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);
이 표시등의 위치는 항상 내 큰 투명 영역 내부를 중심으로한다. 위치 벡터의 w 구성 요소는 1.
내가 구를 그리려면
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);
뒷면에 그림을 그리는이 코드를 가지고, 나는 다음과 같은 기능을 사용
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);
}
내 문제는 작은 구체가 빛을 전혀 반사하지 않는다는 것입니다. 그들은 항상 매우 밝습니다. 큰 구체를 가까이서 움직일 때 입방체의 녹색 선에 빛이 조금 반영되지만 볼은 전혀 영향을받지 않습니다. 또한 방향 조명 (LIGHT1)을 움직일 때 나는 어떤 차이도 볼 수 없습니다. 나는 큐브, 큰 구체, 작은 구체 또는 뒤의 그림의 선상에 반사를 보지 못합니다. 아래는 내 프로그램의 스크린 샷입니다. 내 구체가 빛나지 않게 만들고, 큰 빛의 방향성 빛과 빛을 모두 반영하려면 어떻게해야합니까? 어떤 도움이라도 대단히 감사하겠습니다. 고맙습니다. 당신이 불이 있음을 의미합니까 빛을 반사하여