Opengl 如何计算圆柱体的顶点法线?
我有下面的圆柱体,我正在opengl中绘制一个蠕虫,我想计算顶点法线Opengl 如何计算圆柱体的顶点法线?,opengl,vertex,normals,Opengl,Vertex,Normals,我有下面的圆柱体,我正在opengl中绘制一个蠕虫,我想计算顶点法线 计算每个面(三角形)的法线并将其保存在某个位置。现在,对于每个顶点,都有几个面共享该顶点(图片上通常为6)。最终顶点法线是面法线的平均值。对于6个面,可以计算: int faceCount = 6; float sum = 0.0f; for(int face = 0; face < faceCount; ++face) sum += faceNormals[face].x; normal.x = sum / f
计算每个面(三角形)的法线并将其保存在某个位置。现在,对于每个顶点,都有几个面共享该顶点(图片上通常为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
int faceCount=6;
浮动总和=0.0f;
用于(整数面=0;面<面计数;+面)
总和+=面法线[面].x;
正常。x=总和/面数;
//y和z也是如此
不要忘记对结果向量进行规格化,使其长度为1
注意:不要将
faceNormals
放入这样的数组中。在实际代码中,您可能希望有一个包含所有法线的类似于向量的容器和一些逻辑,说明哪些法线与哪个顶点相关。计算每个面(三角形)的法线,并将其保存在某处。现在,对于每个顶点,都有几个面共享该顶点(图片上通常为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
int faceCount=6;
浮动总和=0.0f;
用于(整数面=0;面<面计数;+面)
总和+=面法线[面].x;
正常。x=总和/面数;
//y和z也是如此
不要忘记对结果向量进行规格化,使其长度为1
注意:不要将faceNormals
放入这样的数组中。在实际代码中,您可能希望有一个包含所有法线的类似于向量的容器和一些逻辑,说明哪些法线与哪个顶点相关。对于柱面环上的每个点,vertexNormal=normalize(vertex-ringCenter)代码>
或者您可以正常计算它们,其中法线是包含该顶点的每个面的所有面法线的归一化总和。对于圆柱环上的每个点,vertexNormal=normalize(vertex-ringCenter)代码>
或者您可以正常计算它们,其中法线是包含该顶点的每个面的所有面法线的归一化总和。这是否实际可行?对于我的测试,它似乎不起作用。。。这就是我所做的:normal.x=(V1.x+V2.x+V3.x)/3.0f
(对于三角形),然后我最终进行了规范化。我做错了什么?@Rookie这不是计算三角形顶点法线的公式。为此,您需要一个新的解决方案。我的答案是对几个法向量求平均值。对不起,我误解了你的意思,因为我理解了运算,它问的是如何计算法线,而不是如何计算平滑法线…@Fiktik:在一般情况下,你就是这样计算法线的。在圆柱体上,你可以得到精确的法线,因为它是一个数学定义的构造。这真的有效吗?对于我的测试,它似乎不起作用。。。这就是我所做的:normal.x=(V1.x+V2.x+V3.x)/3.0f
(对于三角形),然后我最终进行了规范化。我做错了什么?@Rookie这不是计算三角形顶点法线的公式。为此,您需要一个新的解决方案。我的答案是对几个法向量求平均值。对不起,我误解了你的意思,因为我理解了运算,它问的是如何计算法线,而不是如何计算平滑法线…@Fiktik:在一般情况下,你就是这样计算法线的。在圆柱体上,可以得到精确的法线,因为它是一个数学定义的构造。在使用上述公式创建顶点的同时,为每个顶点创建一条法线。这将适用于所述的圆柱体。在使用上述公式创建顶点的同时,为每个顶点创建一条法线。这将适用于所述的气缸。