【发布时间】:2012-09-07 14:11:33
【问题描述】:
我对 3D 开发比较陌生,目前正在使用 Actionscript、Stage3D 和 AGAL 进行学习。我正在尝试创建一个带有平面阴影的简单程序网格的场景。但是,我一直坚持到底应该如何将表面法线传递给着色器以进行照明。我真的很想为每个三角形使用一个单一的表面法线,并为每个三角形做平面,甚至着色。我知道通过每个顶点的法线来实现更好看的照明很容易,但这是我所追求的外观。
由于着色器通常处理每个顶点,而不是每个三角形,我是否可以只为每个三角形传递一个法线,而不是每个顶点一个法线?我的想法完全在这里吗?如果有人有一个简单的平面阴影的工作示例,我将不胜感激。
【问题讨论】:
-
着色取决于每像素法线,这本身取决于您使用的插值方法。我不知道你用的是什么技术,我只能给你一个提示。你想要的只是一个插值,它为每个像素取三角形顶点的平均值。
-
好的,有道理。我认为这个问题现在对我来说更清楚了:鉴于这是片段着色器处理法线的方式,如果我想要平坦的阴影(每张脸一个颜色的阴影,没有渐变),我需要确保我的顶点都没有在三角形之间共享?就目前而言,我正在共享顶点。如果我复制顶点所以没有共享,那么我可以确定每个三角形在每个顶点上都有相同的法线,从而消除了跨像素发生的任何插值。
-
复制顶点是可行的,但使用适当的插值是可行的方法。
-
如果你使用 ALternativa 引擎,你可以试试这个带有一些很酷的着色器的漂亮库alternativa 3D materials
-
所使用的插值方法别无选择。来自 Adobe 自己的 Program3d 文档:“Varying:在顶点和片段着色器之间传输插值数据。来自顶点程序的不同寄存器用作片段程序的输入。值根据与三角形顶点的距离进行插值。 " 请看我下面的帖子。
标签: actionscript 3d stage3d agal