给定一个用三角形镶嵌的补丁,如何修改其新的顶点位置
Given a patch tessellated with triangles, how to modify its new vertices positions?
我通过三角形镶嵌创建了一个细分平面。我想让每个内部新三角形在 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;
}
这是我的苔丝
#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 为细分基元生成顶点,但它无法控制基元本身。曲面细分生成一个三角形字段,所有这些三角形都相互连接以覆盖抽象补丁的区域。如果你对一个三角形进行细分,你会得到大量相互连接的三角形,并且没有办法使它们独立。
至少,只有镶嵌是没有办法的。您可以使用细分后几何着色器来执行此操作,该着色器能够作用于独立的基元。
相关文章:
- 使用C++库在Android项目中修改gradle中的cmake参数,用于插入指令的测试
- 将值指定给向量(2D)的向量中的某个位置
- 使用Unreal C++获取VR耳机的世界位置/方向
- 写入位置0x0000000C时发生访问冲突
- 如何将两个不同矢量的同一位置的两个元素组合在一起
- 函数何时会在c++中包含stack_Unwind_Resume调用
- GL_SHADERSTORAGE_BUFFER位置是否与其他着色器位置冲突
- 独立读取-修改-写入顺序
- 当系统的卷被修改时,如何修改WASAPI环回捕获卷
- 如何在单个链表中交换两个节点的位置,只修改指针
- 当原始数据是常量时,修改指针指向的位置是 UB 吗?
- C++ 友元函数在内存位置上有何不同?
- 给定一个用三角形镶嵌的补丁,如何修改其新的顶点位置
- 如何跟踪通过外部代码修改类变量的所有位置
- 球物理-通过旋转修改球的X/Y位置
- 修改指针在C++函数中指向的位置
- 如何修改cv::Mat类(16UC1)中某个位置的值
- Eclipse CDT:如何找到变量被修改过的所有位置
- 修改相机位置基于按键
- 在中心位置渲染模型不显示(已修改)