Flash和AGAL:如何正确插入法向量

时间:2013-02-06 13:23:49

标签: flash interpolation normals agal

我正在尝试编写一组着色器,以便能够绘制曲面的边缘(而不是多边形!),就像游戏中的 Echochrome 一样。

从图形编程中我记得的,执行此操作的技术是进行多次渲染。第一遍应该将面法线向量和深度编码为RGBA颜色,并将它们绘制到纹理中。第二遍应该在纹理中查找值并且如果当前片段的正常或深度信息与周围纹理像素显着不同,则绘制边缘。法线或深度。

(注意:如果有更简单的方法,请告诉我,特别是如果它在Flash中很容易做到。但是,我的具体问题如下。)

我在编写第一遍时遇到了麻烦。我从Frank D. Luna的使用DirectX 9.0c的3D游戏编程简介:着色器方法中读到的内容是"插入"的正确方法。法向量是平均三角形顶点的法向量,然后对表面上的每个片段使用该值。但是,我的片段着色器正在插入法线向量,这会导致为曲面绘制渐变而不是纯色。

如何让AGAL进行必要的平均而不是插值?

1 个答案:

答案 0 :(得分:1)

我认为你需要复制你的顶点,这样每个三角形都有自己的三个顶点,不与任何其他三角形共享。三角形的每个顶点的法线应该是平均法线:三角形的所有三个法线都是相同的,因此插值不会改变。我知道这不是理想的,但我没有任何其他解决方案。

在OpenGL中,您可以计算几何着色器中的平均法线或使用“平坦”限定符,以便不对法线进行插值,但我认为您无法在AGAL中执行其中任何一个。

See this question/answer获取更多信息。