我需要为使用TRIANGLE_FAN填充的OpenGL不规则多边形添加正确的照明。

glBegin(GL_TRIANGLE_FAN);

glNormal3f(0.0, 0.0, 1.0);
glVertex3f(0.0f, 0.0f,0.0f);
glVertex3f(b[0][0],b[0][1], 0);
glVertex3f(b[11][0], b[11][1], 0);
glVertex3f(b[7][0], b[7][1], 0);
glVertex3f(b[10][0], b[10][1], 0);
glVertex3f(b[6][0],b[6][1], 0);
glVertex3f(b[5][0],b[5][1], 0);
glVertex3f(b[4][0],b[4][1], 0);
glVertex3f(b[8][0],b[8][1], 0);
glVertex3f(b[3][0],b[3][1], 0);
glVertex3f(b[9][0],b[9][1], 0);
glVertex3f(b[2][0],b[2][1], 0);
glVertex3f(b[1][0],b[1][1], 0);
glVertex3f(b[0][0],b[0][1], 0);

glEnd();

我当前的多边形存在的问题是它不能正确反射光。它仅从其顶点执行此操作,从而使入射到其的光成为X形。我猜想我需要向多边形添加顶点。有没有简单的方法可以保持三角形扇形但向其添加顶点呢?

最佳答案

为了在照明对象时获得“正确”的结果,您需要定义适当的法线。由于每个顶点只有一个法线,因此显然着色不正确。

但是,没有正确的方法可以为任何模型计算法线。您必须定义对象的着色方式,然后添加更多glNormal调用以通知OpenGL您希望如何对其进行着色。

07-24 14:14