OpenGL - 如何在单个TRIANGLE_STRIP中跳跃,而不影响纹理贴图?

3
如果将同一个顶点A放入三角带中多次,然后取另一个顶点B并将其也放入三角带中多次(数量取决于想要继续的三角形方向),那么就可以有效地使用一个绘制调用来渲染两个独立的三角带(第一个包含A之前的所有三角形,第二个由B之后的所有三角形组成)。
我的问题:
我担心,即使完整的三角带绘制调用会绘制一个几何上简单连通的网格,但由于跳跃之间的问题,我在尝试纹理网格时会遇到问题。 我还没有达到那个阶段,所以我无法测试它。 我的假设正确吗?在“绘制网格”行业中,我的三角带跳跃技术是否有效?是否有任何适当纹理结果的方法或等效更好的替代跳跃?
2个回答

3
考虑一个由三角形细分为4个相似三角形的“网格”:
      2
       /\
      /  \
   1 /____\3
    /\    /\
   /  \  /  \
0 /____\/4___\5

假设采用逆时针方向(glFrontFace)的绕序方式,三角形:{0,4,1}, {1,4,3}, {3,2,1}以条带形式编码为:{0,4,1,3,2}。技巧在于添加三角形:{4,5,3},通过添加退化(零面积)三角形来保持正确的绕序。简而言之:

{0,4,1,3,2,2,3,3,5,4},添加了零面积三角形:{3,2,2}, {2,2,3}, {3,3,5}

这为较大网格添加了微不足道的额外几何体,前提是使用有效的网格条带化


是的,那正是我在做的事情。所以这确实是一种有效的技术。但是如何给“网格”贴图呢? - Fejwin
1
我假设你的纹理坐标(顶点属性)对应于相同的顶点,并且使用相同的索引。我不确定问题是什么? - Brett Hale
抱歉,我猜问题更多是因为我对于纹理网格的经验较少。 - Fejwin

2
光栅化器绘制三角形的区域。如果一个“三角形”有两个相同的点,那么它就没有面积。因此,没有要渲染的三角形区域。
退化三角形(其中两个点相同的技术术语)是连接多个带条的常用技术。通常在索引数组中通过添加更多索引来完成,网格的实际拓扑结构不需要改变。

这是否意味着,在尝试为该网格提供纹理时,我必须为每个三角形提供纹理片段,并手动设置每个顶点的纹理坐标(跳过那些零面积的三角形)?我有些希望能得到自动纹理包裹解决方案... - Fejwin
1
glTexGen提供了即时纹理坐标生成。但是,这已经成为废弃功能。要预先计算坐标,请参阅此处所有不同模式的数学:http://opengl.org/wiki/Mathematics_of_glTexGen - Sam

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接