Java OpenGL常态化误解?

Java OpenGL常态化误解?,java,opengl,vertex,lighting,normals,Java,Opengl,Vertex,Lighting,Normals,我正试图让我的照明在OpenGL中工作,使用LWJGL作为实现库。我想我遇到的问题是,我没有正确设置法线,因此照明在某些角度下无法工作。下面是我正在测试的多维数据集的代码: glBegin(GL_QUADS); glColor3f(r,g,b); glNormal3f(position.x, position.y, position.z - radius - 0.1f); glVertex3f(position.x + radius, position.y + radius, positio

我正试图让我的照明在OpenGL中工作,使用LWJGL作为实现库。我想我遇到的问题是,我没有正确设置法线,因此照明在某些角度下无法工作。下面是我正在测试的多维数据集的代码:

glBegin(GL_QUADS);

glColor3f(r,g,b);

glNormal3f(position.x, position.y, position.z - radius - 0.1f);
glVertex3f(position.x + radius, position.y + radius, position.z - radius);
glVertex3f(position.x + radius, position.y - radius, position.z - radius);
glVertex3f(position.x - radius, position.y - radius, position.z - radius);
glVertex3f(position.x - radius, position.y + radius, position.z - radius);

glNormal3f(position.x, position.y, position.z + radius + 0.1f);
glVertex3f(position.x + radius, position.y + radius, position.z + radius);
glVertex3f(position.x + radius, position.y - radius, position.z + radius);
glVertex3f(position.x - radius, position.y - radius, position.z + radius);
glVertex3f(position.x - radius, position.y + radius, position.z + radius);

glNormal3f(position.x - radius - 0.1f, position.y, position.z);
glVertex3f(position.x - radius, position.y + radius, position.z + radius);
glVertex3f(position.x - radius, position.y - radius, position.z + radius);
glVertex3f(position.x - radius, position.y - radius, position.z - radius);
glVertex3f(position.x - radius, position.y + radius, position.z - radius);

glNormal3f(position.x + radius + 0.1f, position.y, position.z);
glVertex3f(position.x + radius, position.y + radius, position.z + radius);
glVertex3f(position.x + radius, position.y - radius, position.z + radius);
glVertex3f(position.x + radius, position.y - radius, position.z - radius);
glVertex3f(position.x + radius, position.y + radius, position.z - radius);

glNormal3f(position.x, position.y - radius - 0.1f, position.z);
glVertex3f(position.x + radius, position.y - radius, position.z + radius);
glVertex3f(position.x - radius, position.y - radius, position.z + radius);
glVertex3f(position.x - radius, position.y - radius, position.z - radius);
glVertex3f(position.x + radius, position.y - radius, position.z - radius);

glNormal3f(position.x, position.y + radius + 0.1f, position.z);
glVertex3f(position.x + radius, position.y + radius, position.z + radius);
glVertex3f(position.x - radius, position.y + radius, position.z + radius);
glVertex3f(position.x - radius, position.y + radius, position.z - radius);
glVertex3f(position.x + radius, position.y + radius, position.z - radius);

glEnd();

法向量是相对于顶点本身的,并且总是标准化的(即:它们的长度为1)

这样的一句话:

glNormal3f(position.x, position.y, position.z - radius - 0.1f);
应替换为:

glNormal3f(0.0f, 0.0f, 1.0f);

所以这应该做什么,它实际上在做什么?我只是想确保我的法线是正确的,因为我不知道我是否正确地理解如何计算它们。。。它是表面前面的一个点?对吗?@PhilippeParé:不,它不是曲面前面的点,而是垂直于曲面的方向,由长度为1的向量表示。使用跨越三角形的向量的叉积,以R³计算它们。