OpenGL - 几何着色器 - 三角形带的线

OpenGL - Geometry Shader - Lines to Triangle Strips

我的目标是在 3D 中渲染正弦波 space。波浪将由小线段组成。所以我有一个顶点着色器,它将波浪的点作为线传递到我的几何着色器。

几何着色器获取每条线段中的两个顶点,并使用它们绘制两个三角形。这允许我调整波在 z 方向的厚度。

我的几何着色器是这样设置的:

layout (lines, invocations = WAVES_PER_GROUP) in;
layout (triangle_strip, max_vertices = 4) out;

这是核心代码:

float th = 0.1;

vec4 quadCL = gl_in[0].gl_Position;
vec4 quadCR = gl_in[1].gl_Position;
    
vec4 quadTL = quadCL + vec4(0.0,0.0,-th,0.0);
vec4 quadTR = quadCR + vec4(0.0,0.0,-th,0.0);
vec4 quadBL = quadCL + vec4(0.0,0.0,th,0.0);    
vec4 quadBR = quadCR + vec4(0.0,0.0,th,0.0);

//Push the quad

//Quad
//0: TL
gl_Position = quadTL;
EmitVertex();
//1: BL
gl_Position = quadBL;
EmitVertex();
//2: TR
gl_Position = quadTR;
EmitVertex();
//3: BR
gl_Position = quadBR;
EmitVertex();

EndPrimitive(); 

我已确保所有位置变量的 w 值为 1.0。我得到的似乎是 z 方向上的某种剪裁。如果这是正确的方法,那么我将需要对代码的其他部分进行故障排除。

我将不胜感激&&||为此祈祷。

干杯!

好的,经过一些实验后,我找到了一个似乎可行的解决方案。

我从一个顶点着色器开始,它在传递到几何着色器之前将位置乘以投影和模型视图矩阵。和你一样,我发现向 Z 坐标添加偏移量以生成三角形会导致奇怪的事情。但是向 X and/or Y 添加偏移量确实有效。

现在我重写了我的顶点着色器以通过位置不变,并重写了几何着色器以在 EmitVertex() 之前将每个 quadTL quadTR quadBL quadBR 乘以投影和模型视图矩阵。即使它只是一个 Z 偏移,也会创建可见的三角形。

我认为这与 Z 与 X 和 Y 中不同的值范围有关,至少在我的程序中,当归一化到设备 space 时。但不完全确定。