2012-11-22 92 views
0

我有一个结构QUAD,存储4个指针到4 VECTOR3D(其中包含3个浮动),以便我可以绘制四边形网格。 从我的理解是每当我绘制一个网格时,我都需要正常的以适当地对网格进行光照/遮蔽,当它是一个铺设在平原上的网格时,使用普通的每个面都相对容易。当我有2×4的网格铺设在XZ坐标上,并且试图将它的中心(0,0,0)提高一个特定的点,比如(0,4,0)时,它将开始形成真实的3D形状,那么我需要再次计算法线。我很难理解如何以及如何计算法线。正如预期的那样,三维形状像它仍然是一个平面网格,因此它不代表真实的形状。其中一个解释说我需要计算每个顶点的法线而不是每个面。 这是否意味着我需要计算网格各个角的法线?一旦我有了法线,我会怎么做?我仍然使用旧的glBegin glEnd方法,但现在我觉得我需要使用DrawArray方法。我非常困惑,我很确定我没有多少声音,但我非常感谢你的帮助。计算四边形网格法线

回答

1

如果你需要平坦的表面,那么你的法线将是四边形平面的法线。如果你需要“柔软的外观”表面,你需要混合(read this和观看this很酷的简单视频)法线 - 这将增加一些渐变。

+0

因此,如果我要计算顶点法线,是否需要遍历所有9个坐标(2x2网格)并计算正常顶点并将它们存储在单独的空间中并使用glNormalPointer/glvertexPointer和glDrawArrays? – user1830954

+0

如果你想使用旧学校API,你可以以旧的方式设置法线。唯一不同的是,正常值与此点的另一个正常值混合(如果一个四边形有更多这一点),因为每个四边形都有它自己的法线,并且您想要软化曲面之间的过渡。 – JAre