gpt4 book ai didi

c++ - 立方体的法线似乎指向内部

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:09:51 24 4
gpt4 key购买 nike

我编写了以下函数来绘制立方体:

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();
}

当用光照在立方体上进行渲染时,看起来当我旋转立方体时,正确的阴影过渡只发生在大约一半的面上。其余的只是保持非常暗的阴影,就好像我已经删除了正常的计算。

然后我决定移除几个面以查看立方体内部。那些在外面没有正确反射光线的面,在里面却能正确地反射光线。我如何确保每个面的法线从该面指向外,而不是指向立方体的中心?

最佳答案

要反转法线的方向,交换您用于叉积的顺序:

Vector normal = w.cross(v).normalised();

关于c++ - 立方体的法线似乎指向内部,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43545328/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com