gpt4 book ai didi

c++ - 计算 GL_TRIANGLE 的顶点法线

转载 作者:行者123 更新时间:2023-11-28 02:35:17 24 4
gpt4 key购买 nike

我在 OpenGL 中像这样打印一个三角形:

glBegin(GL_TRIANGLES);
glVertex3f(1,2,3);
glVertex3f(4,6,8);
glVertex3f(5,7,9);
glEnd();

我想计算三角形每个顶点的法线,我想像这样打印三角形:

glBegin(GL_TRIANGLES);
glNormal3f(?,?,?);
glVertex3f(1,2,3);
glNormal3f(?,?,?);
glVertex3f(4,6,8);
glNormal3f(?,?,?);
glVertex3f(5,7,9);
glEnd();

简而言之,我如何计算这个三角形的每个顶点的法线?

最佳答案

您需要计算 2 个边 vector 的叉积。

Nx = Ay*Bz-Az*By;
Ny = Az*Bx-Ax*Bz;
Nz = Ax*By-Ay*Bx;

其中 A 和 B 是:P1-P0 和 P2-P1其中 P0、P1、P2 是顶点坐标。

N 应该归一化并分配给每个顶点。

float len=sqrt(Nx*Nx+Ny*Ny+Nz*Nz);
Nx/=len;
Ny/=len;
Nz/=len;

请注意,如果以相反的顺序(顺时针方向)提供 P0 P1 P2,则 N 法线的符号将被翻转。

关于c++ - 计算 GL_TRIANGLE 的顶点法线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27690346/

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