【问题标题】:Approach to write a fragment shader for each triangle in a mesh为网格中的每个三角形编写片段着色器的方法
【发布时间】:2015-03-01 12:37:42
【问题描述】:

我有一个由几个三角形组成的网格(订购 100 个)。我想为它们中的每一个定义一个不同的片段着色器。因此能够为每个三角形显示不同类型的反射行为。

我应该如何解决这个问题?我应该开始定义一个 GLSL 程序并尝试区分不同的三角形吗?这个答案暗示我这不是正确的方法 glDrawElements and flat shading 。即使这个Using a different vertex and fragment shader for each object in webgl 似乎也不是正确的方法,因为我不想拥有多个对象,而只想拥有一个具有不同材质(片段着色器)的对象。

【问题讨论】:

    标签: opengl-es webgl fragment-shader


    【解决方案1】:

    我的建议是创建一个超级着色器,它可以处理您想要的所有不同场景。

    为了进行设置,您需要指定要使用着色器的哪个部分的属性。

    例如在您的顶点或片段着色器中:

    attribute bool flatShading;
    attribute bool phongShading;
    if (flatShading) {
      // perform flat shading
    } else if (phongShading) {
      // perform phong shading
    }
    

    然后设置缓冲区,以便每个三角形中的顶点都应用了特定的着色属性。

    【讨论】:

    • 感谢您的回答。我明白了,我想我会朝这个方向走。我唯一的困惑是如何为三角形设置一个属性:由于每个三角形都有 3 个顶点,其中 2 个与另一个三角形共享。为顶点设置属性似乎是一种错误的方式。但也许我在这里缺乏一些 opengl 理论
    • 基本上,您将需要复制位于单独阴影边界上的顶点(在您的情况下听起来像是所有顶点)。我知道这是很多冗余。
    猜你喜欢
    • 1970-01-01
    • 2015-01-06
    • 2019-08-07
    • 1970-01-01
    • 1970-01-01
    • 2021-05-02
    • 1970-01-01
    • 2020-04-07
    • 2021-11-05
    相关资源
    最近更新 更多