Rem*_*tra 2 opengl glsl tessellation
为什么下面的曲面细分控制着色器会使大多数三角形消失?
#version 410
layout(vertices = 3) out;
void main(void) {
gl_TessLevelInner[0]=1;
gl_TessLevelOuter[gl_InvocationID]=gl_InvocationID+1;
gl_TessLevelOuter[gl_InvocationID]=gl_InvocationID+1;
gl_TessLevelOuter[gl_InvocationID]=gl_InvocationID+1;
}
Run Code Online (Sandbox Code Playgroud)
我输入三角形。当我用 0,1 和 2 索引 gl_TessLevelOuter 时,一切正常。在我看来,这个构造节省了我的 if 语句,我相信这有助于着色器的并行执行。当然,我在片段中省略了顶点计算。
接受的答案是不正确的。您可以指定内部级别为 1。如果所有外部级别也为 1,则不会出现曲面细分(三角形将保持不变)。如果内部为 1 并且至少有一个外部>1,则内部将有效为 2 或 3(取决于间距),确保内部区域中至少有 1 个点。
OP 代码的实际问题是它设置了1 个外部级别 3 次,而不是设置所有 3 个外部级别。另外2个默认为0,导致补丁被丢弃。 这就是三角形正在消失的原因。
参考: https: //www.opengl.org/wiki/Tessellation
| 归档时间: |
|
| 查看次数: |
2440 次 |
| 最近记录: |