我正在尝试使用行进立方体算法使用Gouraud阴影渲染3D模型(来自volvis.org)。到目前为止,我对每个顶点具有法线:
GetNormalForVertex(vertex &b, vertex &a, vertex &c) {
u.X = a.X - b.X;
u.Y = a.Y - b.Y;
u.Z = a.Z - b.Z;
v.X = c.X - b.X;
v.Y = c.Y - b.Y;
v.Z = c.Z - b.Z;
return Cross(u,v);
}
渲染时,我可以看到一个漂亮的平面阴影。
现在,据我所知,我需要对那些顶点法线进行插值,以在交点处找到法线,以获取Gouraud阴影。我怎样才能插补顶点法线?
最佳答案
首先,您不计算顶点法线。您正在计算脸部法线。这是计算顶点法线的过程中的步骤1。
下一步是不插入任何内容。您要做的是为附着到顶点的每个面计算(非标准化的)面法线。然后将它们全部加在一起并标准化结果。那就是顶点法线。
如何确定将哪些面附加到顶点是另一回事。在您的情况下,由于您是通过行进多维数据集构建此数据的,因此从相邻多维数据集生成或检索三角形应该不会太困难。但是,如果您通过了生成步骤并且只有一包三角形,那么您将需要一个适当的网格拓扑数据结构。 Winged-edge或Quad-edge都是不错的选择。
关于opengl - 如何对顶点法线进行插值?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15624736/