【发布时间】:2018-03-20 12:16:37
【问题描述】:
我通过三角形镶嵌创建了一个镶嵌平面。我想让每个内部新三角形在 y 轴上上下移动,独立于其他三角形。 我想在 TES 或 TCS 中修改他们的 gl_Position 来这样做,但到目前为止我所获得的只是让所有基元同时移动。 我怎样才能实现我的目标?
这是镶嵌平面 [飞机]: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;
}
}
【问题讨论】:
-
你不能添加几何着色器,并且在几何着色器之前和之后有一个固定的功能管道阶段,称为输入汇编程序运行。所以基本上几何着色器具有移动、添加、删除顶点或更改拓扑的能力。但请注意几何着色器对性能非常不利,因此我建议添加计算着色器并在其中做你想做的事情。
标签: c++ opengl shader tessellation