1
我試圖在幾何着色器中使用gl_ClipDistance
,但是我無法使它工作。 我的着色器在變換反饋記錄中運行,我想剪切4個剪切平面的三角形。在幾何着色器中使用gl_ClipDistance
我閱讀了GLSL的lang規範,並試圖找到一個完整的例子(沒有找到任何)。這裏是我的着色器看起來像(縮短):
#version 150
#extension GL_EXT_gpu_shader4 : require
#extension GL_EXT_geometry_shader4 : require
#pragma optionNV unroll all
layout(triangles) in;
layout(triangle_strip, max_vertices=3) out;
in vec4 io_Position[];
in vec3 io_Normal[];
in vec4 io_MultiTexCoord0[];
in vec4 io_MultiTexCoord1[];
...
out vec3 out_Position;
out vec3 out_Normal;
out vec2 out_MultiTexCoord0;
out vec2 out_MultiTexCoord1;
out float gl_ClipDistance[4]; // do I have to initialize it like that?
void main()
{
...
// emit three vertices
for (int v=0; v<gl_VerticesIn; v++)
{
out_Position = io_Position[v].xyz;
out_Normal = io_Normal[v];
out_MultiTexCoord0 = io_MultiTexCoord0[v].xy;
out_MultiTexCoord1 = io_MultiTexCoord1[v].xy;
// calculate clip distances
for(int c=0; c<4; c++)
{
// From spec: The clip distances will be linearly interpolated across the
// primitive and the portion of the primitive with interpolated distances less than
gl_ClipDistance[c] = distancePlane(clipPlanes[c], triWorldPos[v]);
}
EmitVertex();
}
// create triangle
EndPrimitive();
}
之前,我開始變換反饋我設置:
取決於哪一方頂點位於glEnable(GL_CLIP_PLANE0);
glEnable(GL_CLIP_PLANE1);
glEnable(GL_CLIP_PLANE2);
glEnable(GL_CLIP_PLANE3);
我planeDistance()
回報正面和負面的距離。我甚至嘗試將負值寫入gl_ClipDistance[c]
的某些部分,但它不夾任何東西。
我在做什麼錯?
啊......這是我從來不太確定的事情。我認爲剪輯仍然會在變換反饋中執行。這:[http://wiki.delphigl.com/index.php/Transform-Feedback]給出了一個很好的概述。我將嘗試記錄clipDistance並將其應用於實體渲染。 –