Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/130.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 给定用三角形细分的面片,如何修改其新顶点位置?_C++_Opengl_Shader_Tessellation - Fatal编程技术网

C++ 给定用三角形细分的面片,如何修改其新顶点位置?

C++ 给定用三角形细分的面片,如何修改其新顶点位置?,c++,opengl,shader,tessellation,C++,Opengl,Shader,Tessellation,我已经通过三角形细分创建了一个细分平面。我想让每个内部新三角形在y轴上上下移动,独立于其他三角形。 我想在TES或TCS中修改它们的gl_位置,但到目前为止,我所获得的只是使所有原语同时移动。 我怎样才能实现我的目标 这是镶嵌平面 [飞机]:“” 这是我的TCS #version 450 core layout (vertices = 3) out; // Input Block in VS_OUT{ vec2 UV; } tcs_in[]; // Output Block out

我已经通过三角形细分创建了一个细分平面。我想让每个内部新三角形在y轴上上下移动,独立于其他三角形。 我想在TES或TCS中修改它们的gl_位置,但到目前为止,我所获得的只是使所有原语同时移动。 我怎样才能实现我的目标

这是镶嵌平面 [飞机]:“”

这是我的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;   
}
这是我的简历

#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;

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

你不能那样做。TES为细分的基本体生成顶点,但不能控制基本体本身。细分生成一个三角形区域,所有三角形相互连接以覆盖整个区域。如果对三角形进行细分,将得到大量相互关联的三角形,并且无法使它们独立


至少,只有镶嵌是不可能的。您可以使用后细分几何体着色器来执行此操作,该着色器能够对独立的基本体进行操作。

您无法添加几何体着色器,并且在几何体着色器之前和之后,有一个称为“输入汇编程序运行”的固定功能管道阶段。所以基本上Gemoetry着色器能够移动、添加、删除顶点或更改拓扑。但请注意,几何体着色器对性能非常不利,所以我建议添加计算着色器,并在其中执行您想要的操作。非常感谢,现在就可以了!