C++ 给定用三角形细分的面片,如何修改其新顶点位置?
我已经通过三角形细分创建了一个细分平面。我想让每个内部新三角形在y轴上上下移动,独立于其他三角形。 我想在TES或TCS中修改它们的gl_位置,但到目前为止,我所获得的只是使所有原语同时移动。 我怎样才能实现我的目标 这是镶嵌平面 [飞机]:“” 这是我的TCSC++ 给定用三角形细分的面片,如何修改其新顶点位置?,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
#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着色器能够移动、添加、删除顶点或更改拓扑。但请注意,几何体着色器对性能非常不利,所以我建议添加计算着色器,并在其中执行您想要的操作。非常感谢,现在就可以了!