【问题标题】:OpenGL - How to Jump in a Single TRIANGLE_STRIP without affecting Texturing?OpenGL - 如何在不影响纹理的情况下跳入单个 TRIANGLE_STRIP?
【发布时间】:2019-06-01 05:24:49
【问题描述】:

如果将同一个顶点 A 多次放入三角形带中,然后取另一个顶点 B 并将这个顶点 B 也放入三角形带中多次(数量取决于要继续的三角形方向),然后一次有效地可以有两个单独的三角形条带,只需一个绘制调用(第一个包含顶点 A 之前的所有三角形,第二个包含顶点 B 之后的所有三角形)。

我的问题:

恐怕,即使完整的三角形条带绘制调用将绘制几何简单连接的网格,我在尝试对网格进行纹理处理时也会遇到问题,因为它们之间存在跳跃。我还没到那里,所以我无法测试它。我的假设正确吗? 无论如何,我在三角带中的跳跃是“绘图网格”行业的有效技术吗?有什么方法可以适当地对结果进行纹理化,或者有一个等效的更好的跳跃替代方法?

【问题讨论】:

    标签: opengl geometry textures gaps-and-islands gl-triangle-strip


    【解决方案1】:

    考虑一个由一个三角形组成的“网格”,该三角形细分为 4 个相似的三角形:

          2
           /\
          /  \
       1 /____\3
        /\    /\
       /  \  /  \
    0 /____\/4___\5
    

    假设 CCW (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}

    如果使用高效的网格striping,这会为较大的网格添加可忽略不计的额外几何体。

    【讨论】:

    • 是的,这正是我在那里所做的。所以它毕竟是一种有效的技术。但是对“网格”进行纹理处理呢?
    • 我假设您的纹理坐标(顶点属性)对应于相同的顶点,因此使用相同的索引。我不确定会是什么问题?
    • 抱歉,我想问题在于我对纹理网格的一般经验不足。
    【解决方案2】:

    光栅器绘制三角形的区域。具有两个相同点的“三角形”没有面积。因此,没有要渲染的三角形区域。

    退化三角形(两个点相同的三角形的技术术语)是连接多个条带的常用技术。这通常在索引数组中通过添加更多索引来完成;网格的实际拓扑无需更改。

    【讨论】:

    • 这是否意味着在尝试对网格进行纹理化时,我必须为每个三角形提供纹理的 sn-ps,并为每个顶点手动设置纹理坐标(跳过那些零区域的)?我有点希望有一个自动纹理包装解决方案......
    • glTexGen 提供动态纹理坐标生成。这是一个已弃用的功能。要预先计算坐标,请在此处查看所有不同 modi 的数学:opengl.org/wiki/Mathematics_of_glTexGen
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-23
    • 2018-06-08
    • 1970-01-01
    • 2014-08-04
    • 2015-10-23
    • 1970-01-01
    相关资源
    最近更新 更多