0

我通过三角形镶嵌创建了一个镶嵌平面。我想让每个内部新三角形在 y 轴上上下移动,独立于其他三角形。我想在 TES 或 TCS 中修改他们的 gl_Position 来这样做,但到目前为止我所获得的只是让所有基元同时移动。我怎样才能实现我的目标?

这是镶嵌平面 [plane]:https ://ibb.co/jWRjvH ""

这是我的 TCS

#version 450 core

layout (vertices = 3) out;

// Input Block
in VS_OUT{
    vec2 UV;
} tcs_in[];

// Output Block
out TCS_OUT{
    vec2 UV;
} tcs_out[];


void main()
{


    if(gl_InvocationID == 0)
    {
        gl_TessLevelInner[0] = 10.0;
        gl_TessLevelOuter[0] = 10.0;
        gl_TessLevelOuter[1] = 10.0;
        gl_TessLevelOuter[2] = 10.0;
    }
    gl_out[gl_InvocationID].gl_Position=gl_in[gl_InvocationID].gl_Position;

    tcs_out[gl_InvocationID].UV = tcs_in[gl_InvocationID].UV;   
}

这是我的 TES

#version 450 core

layout (triangles, equal_spacing, cw) in;    

// Input Block
in TCS_OUT{
    vec2 UV;
} tes_in[];

// Output Block
out TES_OUT{
    vec2 UV;
} tes_out;


void main()
{

    gl_Position = (gl_TessCoord.x * gl_in[0].gl_Position +
                   gl_TessCoord.y * gl_in[1].gl_Position + 
                   gl_TessCoord.z * gl_in[2].gl_Position);


     tes_out.UV = gl_TessCoord.x * tes_in[0].UV + 
                  gl_TessCoord.y * tes_in[1].UV + 
                  gl_TessCoord.z * tes_in[2].UV;

     }
 }
4

1 回答 1

1

我想让每个内部新三角形在 y 轴上上下移动,独立于其他三角形。

你不能那样做。TES 为镶嵌的图元生成顶点,但它无法控制图元本身。Tessellation 生成一个三角形场,所有这些三角形相互连接以覆盖抽象补丁的区域。如果你镶嵌一个三角形,你会得到大量相互连接的三角形,没有办法让它们独立。

至少,只有镶嵌是没有办法的。您可以使用能够作用于独立图元的后镶嵌几何着色器来完成此操作。

于 2018-03-20T14:57:39.430 回答