1

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

根据我对图形编程的记忆,这样做的技术是进行多通道渲染。第一遍应该将面部法线向量和深度编码为 RGBA 颜色并将它们绘制到纹理上。如果当前片段的法线或深度信息与周围纹素的法线或深度有显着差异,则第二遍应查找纹理中的值并绘制边缘。

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

我在编写第一遍时遇到了障碍。根据我在使用 DirectX 9.0c 进行 3D 游戏编程的介绍:Frank D. Luna 的着色器方法中读到的内容,“插入”法线向量的正确方法是对三角形顶点的法线向量求平均,然后使用它表面上每个片段的值。但是,我的片段着色器改为对法线向量进行插值,这导致为表面绘制渐变而不是纯色。

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

4

1 回答 1

1

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

在 OpenGL 中,您可以在几何着色器中计算平均法线或使用“平面”限定符,这样法线就不会被插值,但我认为您不能在 AGAL 中执行这些操作。

有关更多信息,请参阅此问题/答案。

于 2013-02-06T14:17:52.410 回答