【问题标题】:calculating normals for quad mesh计算四边形网格的法线
【发布时间】:2012-11-10 08:57:02
【问题描述】:

我有一个结构 QUAD,它存储了 4 个指向 4 个 VECTOR3D(包含 3 个浮点数)的指针,以便我可以绘制四边形网格。 据我了解,每当我绘制网格时,我也需要使用法线来正确地对网格进行光照/着色,而当它是放置在平原上的网格时,它相对容易,每张脸都使用法线。

当我在 XZ 坐标上放置 2 x 2 四边形网格并尝试将其中心 (0,0,0) 提升到某个点时,例如 (0, 4, 0),它将开始形成真正的 3D 形状,然后我需要再次计算法线。我很难理解计算法线的方式和内容。正如预期的那样,3D 形状的阴影就像它仍然是一个平面网格,所以它不代表真实的形状。一种解释说我需要计算每个顶点而不是每个面的法线。 这是否意味着我需要计算网格所有角的法线?一旦我有法线,我会怎么做?我仍在使用旧的 glBegin glEnd 方法,但现在我觉得我需要使用 DrawArray 方法。我很困惑,我很确定我的声音不大,但我非常感谢你的帮助。

【问题讨论】:

    标签: c++ 3d mesh lighting


    【解决方案1】:

    如果您需要平坦的表面,那么您的法线将是四边形平面的法线。如果你需要“看起来柔和”的表面,你需要混合(read this 并观看 this 很酷的简单视频)法线 - 这将添加某种渐变。

    【讨论】:

    • 所以如果我要计算顶点法线,是否需要遍历所有 9 个坐标(2x2 网格)并计算法线顶点并将它们存储在单独的空间中并使用 glNormalPointer/glvertexPointer 和 glDrawArrays?
    • 如果你想使用 old school api 你可以用旧的方式设置法线。唯一的区别是法线值与该点的另一个法线值混合(如果一个四边形具有该点),因为每个四边形都有自己的法线,并且您想要软化曲面之间的过渡。
    猜你喜欢
    • 1970-01-01
    • 2012-04-06
    • 1970-01-01
    • 1970-01-01
    • 2019-04-22
    • 2013-03-25
    • 2011-10-03
    • 2011-12-16
    • 1970-01-01
    相关资源
    最近更新 更多