【发布时间】:2017-04-21 14:32:33
【问题描述】:
我写了以下函数来绘制一个立方体:
void drawCube() {
Point vertices[8] = { Point(-1.0, -1.0, -1.0), Point(-1.0, -1.0, 1.0), Point(1.0, -1.0, 1.0), Point(1.0, -1.0, -1.0),
Point(-1.0, 1.0, -1.0), Point(-1.0, 1.0, 1.0), Point(1.0, 1.0, 1.0), Point(1.0, 1.0, -1.0) };
int faces[6][4] = {{0, 1, 2, 3}, {0, 3, 7, 4}, {0, 1, 5, 4}, {1, 2, 6, 5}, {3, 2, 6, 7}, {4, 5, 6, 7}};
glBegin(GL_QUADS);
for (unsigned int face = 0; face < 6; face++) {
Vector v = vertices[faces[face][1]] - vertices[faces[face][0]];
Vector w = vertices[faces[face][2]] - vertices[faces[face][0]];
Vector normal = v.cross(w).normalised();
glNormal3f(normal.dx, normal.dy, normal.dz);
for (unsigned int vertex = 0; vertex < 4; vertex++) {
switch (vertex) {
case 0: glTexCoord2f(0, 0); break;
case 1: glTexCoord2f(1, 0); break;
case 2: glTexCoord2f(1, 1); break;
case 3: glTexCoord2f(0, 1); break;
}
glVertex3f(vertices[faces[face][vertex]].x, vertices[faces[face][vertex]].y, vertices[faces[face][vertex]].z);
}
}
glEnd();
}
当光照在立方体上渲染时,看起来当我旋转立方体时,正确的阴影过渡只发生在大约一半的面上。其余的只是保持非常暗的阴影,好像我已经删除了正常的计算。
然后我决定删除几个面孔以查看立方体内部。在外面没有正确反射光线的面,在里面正确地反射光线。如何确保每个面的法线都指向该面,而不是指向立方体的中心?
【问题讨论】:
-
如果您知道立方体的中心,您可以轻松检查法线是否远离它
-
我可以检查从中心到法线向量 (x, y, z) 的距离是否大于从中心到计算法线的点的距离吗?如果没有,则设置
normal = -normal? -
对不起,我的评论部分错误和误导,我会在第二次写一个答案