我想在 OpenGL ES 2.0 中显示网格模型,它清楚地显示实际的网格,所以我不希望每个图元/三角形上都有平滑的着色。我能想到的唯一两个选择是
- 每个三角形都有自己的一组法线,所有法线都垂直于三角形表面(但我想我无法使用此选项在三角形之间共享顶点)
- 使用黑线表示三角形/基本边,并坚持使用共享顶点和每个顶点一个法线的正常方式
一定要这样吗?为什么我不能简单地读取基元而不指定任何法线并以某种方式让 OpenGL ES 2.0 在每个面上制作平面阴影?
类似问题类似的 Stackoverflow 问题,但没有解决方案的建议
因为为了在网格上添加阴影(任何、平滑或平坦),您需要一个光照模型,而 OpenGL ES 无法猜测它。 GL ES 2 中没有固定的管道,因此您无法使用任何内置函数来完成这项工作(使用内置照明模型)。
在平面着色中,整个三角形将使用相同的颜色绘制,这是根据其法线和光源之间的角度计算的(是的,您还需要一个光源,它可能只是透视图的原点)。这就是为什么每个三角形至少需要一个法线。
然后,GPU 以高度并行的方式工作,同时处理多个顶点(然后是片段)。为了提高效率,它不能在顶点之间共享数据。这就是为什么您需要为每个顶点复制法线的原因。
另外,正如您所说,您的网格不能再在三角形之间共享顶点,因为它们仅共享顶点位置,而不共享顶点法线。所以你需要把3 * NbTriangles
缓冲区中的顶点,每个顶点都有一个位置和一个法线。您也无法享受使用三角形带/扇形的好处,因为您的任何一个面都不会与另一个面有共同的顶点(因为法线不同)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)