簡體   English   中英

計算GL_TRIANGLE的頂點法線

[英]Calculating Vertex Normals for GL_TRIANGLE

我在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個邊緣向量的叉積。

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法線的符號將被翻轉。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM