2012-11-28 75 views
0

我在Android中使用opengles 2.0得出了一些模型,但这些光滑着色之间切换到平面着色在Opengles 2.0

盒状模型的外观与平滑阴影太顺利了,我需要遮荫顺利的工作了3D应用球体模型。

我将3D模型导出为.OBJ文件,并使用搅拌器光滑地平滑。

现在我的3d模型结构有

每个顶点正常。

使用顶点索引数组绘制模型。

由于我的模型的法线是每个顶点的法线我的计划来应对这一现象正在以每面

正常,重建我所有的绘制方法不使用顶点索引数组导致它无法做到。

我不想做这个计划,因为顶点索引数组消耗更少的内存。

有没有一种方法可以使顶点索引数组的平滑过程像绘制函数一样使GLSL使用插值变化或其他方式的中间值?

感谢您的帮助和抱歉,我的英语不好。

+2

看看这里:http://stackoverflow.com/questions/9310771/can-i-specify-per-face-normal-in-opengl-es-and-achieve-non-smooth-flat-shading? rq = 1我认为这是做到这一点的唯一方法! – Dirk

+0

是的,我看看那个链接,所以它看起来像只有这样做的方式。但无论如何谢谢。 – user1085647

回答

0

我也与这一堆搏斗 - 你可以肯定地改变你的管道来生成精确的面部法线并将它们传递到你的管道,然后在你的照明计算中使用它。

或者你可以在模型本身的Blender(或任何其他3D程序)中完成这项工作 - 复制你想要保持平坦的顶点,使得每个面都有自己的顶点,当没有连接到其他面时,顶点法线将是脸部法线(具有平滑或平坦的阴影)。原来有6个顶点的立方体会变成4 * 6 = 24个顶点,具有相同的6个四边形面,但每个顶点的顶点法线会与四边形的面法线精确对齐。

最终结果是一样的,需要将更多顶点传递给管道,但我喜欢模型中的解决方案,因为它允许您在模型中混合要求平滑和平坦着色的位置。

我会想象甚至可能有一个在搅拌机脚本来自动执行此操作。关于Blender正在做什么以及为什么在可编程管线中没有平坦的阴影,这里是a loosely related article