내 문제는 매우 간단합니다. LWJGL에서 법선을 그리면 초기화 후에 수동으로 업데이트 될 때까지 광원이 모델에만 적용됩니다. 내 코드합니다 (스탠포드 토끼 모델에서로드) 법선을 그리기위한거야 여기조명으로 LWJGL의 법선을 그립니다.
static Vector3f lightPosition = new Vector3f(-500f, -100f, 500f);
GL11.glEnable(GL11.GL_LIGHTING);
GL11.glEnable(GL11.GL_LIGHT0);
GL11.glLightModel(GL11.GL_LIGHT_MODEL_AMBIENT, asFloatBuffer(new float[]{0.05f, 0.05f, 0.05f, 1f}));
GL11.glLight(GL11.GL_LIGHT0, GL11.GL_DIFFUSE, asFloatBuffer(new float[]{1.5f, 1.5f, 1.5f, 1f}));
그리고 :
for (Face f : bunnyModel.faces){
Vector3f n1 = bunnyModel.normals.get((int)f.normal.x - 1);
GL11.glNormal3f(n1.x, n1.y, n1.z);
Vector3f v1 = bunnyModel.vertices.get((int)f.vertex.x - 1);
GL11.glVertex3f(v1.x, v1.y, v1.z);
Vector3f n2 = bunnyModel.normals.get((int)f.normal.y - 1);
GL11.glNormal3f(n2.x, n2.y, n2.z);
Vector3f v2 = bunnyModel.vertices.get((int)f.vertex.y - 1);
GL11.glVertex3f(v2.x, v2.y, v2.z);
Vector3f n3 = bunnyModel.normals.get((int)f.normal.z - 1);
GL11.glNormal3f(n3.x, n3.y, n3.z);
Vector3f v3 = bunnyModel.vertices.get((int)f.vertex.z - 1);
GL11.glVertex3f(v3.x, v3.y, v3.z);
}
내가 잘못 여기서 뭐하는 거지 여기에 조명 초기화입니까? 법선을 비활성화하면 라이팅은 모델을 제외한 모든 것에 잘 작동합니다. 그러나 내가 그들을 가능하게하면 토끼는 빛을 받지만 다른 표면은 빛을 얻지 못합니다.
다른 표면에도 법선이 있습니까? 또는 아마도 내부를 가리키는 법선일까요? – Abaab
아니요, 유일한 법선은 모델 내에 포함됩니다. – caseif
씬의 법선 만 모델의 법선이면, 나머지 장면은 법선없이 올바르게 조명되지 않습니다. – Abaab