我正在向管道发送一个三角形,并希望将其镶嵌到一个 sierpinski 垫圈中。感觉使用几何着色器的实例化会容易得多,因此请告诉我使用曲面细分着色器的想法是否完全错误。
在镶嵌控制期间,我检查 ID0-11
并将顶点位置和颜色存储在当前 ID 的位置上。
我为我的镶嵌控制着色器定义glPatchParameteri(GL_PATCH_VERTICES, 3);
和layout(vertices = 12) out;
,因为我希望将每个三角形镶嵌成 4 个三角形。
看起来在我的镶嵌评估着色器中,in vec3 tcPosition[];
和in vec3 tcColor[];
数组包含12
正确顺序的正确值。但是:如何在评估过程中正确关联它们?gl_primitiveID
在镶嵌评估期间有什么类似的吗?我需要替换所有生成的顶点,因为它们是从同一个补丁中产生的gl_primitiveID
。0
目前我只使用前三个顶点(0
, 1
, 2
)的信息,但我需要在每个生成的三角形之后将这些索引移动 3。
void main(){
vec3 p0 = gl_TessCoord.x * tcPosition[0];
vec3 p1 = gl_TessCoord.y * tcPosition[1];
vec3 p2 = gl_TessCoord.z * tcPosition[2];
tePosition = p0 + p1 + p2;
teColor = gl_TessCoord.x * tcColor[0] + gl_TessCoord.y * tcColor[1] + gl_TessCoord.z * tcColor[2];
gl_Position = mvp * vec4(tePosition, 1);
}
非常感谢任何如何巧妙地镶嵌三角形以便我以后能够使用变换反馈进行乒乓渲染的见解或想法。