如何计算圆柱的顶点法线?

时间:2012-03-02 11:49:45

标签: opengl vertex normals

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

enter image description here

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分: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 - 类似于所有法线的容器,并且有一些逻辑说明哪些法线与哪个顶点相关。