0

我有以下圆柱体,我在 opengl 中绘制一条蠕虫,我想计算顶点法线。

在此处输入图像描述

4

2 回答 2

3

对于圆柱环上的每个点,vertexNormal = normalize(vertexPosition - ringCenter);

或者您可以正常计算它们,其中 normal 是包含该顶点的每个面的所有面法线的归一化总和。

于 2012-03-02T22:24:51.863 回答
2

计算每个面(三角形)的法线并将其保存在某处。现在对于每个顶点,您都有几个共享顶点的面(通常在您的图片上为 6 个)。您的最终顶点法线是面法线的平均值。对于 6 个面,您计算:

int faceCount = 6;
float sum = 0.0f;
for(int face = 0; face < faceCount; ++face)
    sum += faceNormals[face].x;
normal.x = sum / faceCount;
// and so on for y and z

不要忘记对结果向量进行归一化,使其长度为 1。

注意:不要放入faceNormals这样的数组。在真实的代码中,您可能希望拥有一个vector包含所有法线的单一容器,以及一些说明哪些法线与哪些顶点相关的逻辑。

于 2012-03-02T12:09:39.153 回答