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 时。但不完全确定。
我的目标是在 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 时。但不完全确定。