所以我对OpenGL相当新,我一直在试验GLSL,当然,我遇到了一些问题。首先,我应该注意到我目前只绘制一个奇异的三角形。其次,这是我的(非常简单的)着色器:
// Vertex Shader
#version 330
in vec3 vertex_position;
void main()
{
gl_Position = vec4(vertex_position, 1.0);
}
和
// Fragment Shader
#version 330
out vec4 fragColour;
void main() {
fragColour = vec4(0.0, 1.0, 0.0, 1.0);
}
这足以绘制三角形。大。现在我想到编辑Vertex Shader而不是
gl_Position = vec4(vertex_position, 1.0)
我做
gl_Position = vec4(vertex_position, 2.0)
果然,它放大了我的三角形。所以我想,也许如果我从顶点着色器中取出Z并将W设置为等于它,我就能获得深度感,所以我这样做了:
// Vertex Shader
#version 330
in vec3 vertex_position;
void main()
{
gl_Position = vec4(vertex_position, vertex_position.z);
}
但是,当我运行该程序时,它什么也没显示。如果人们想知道,这是我的顶点:
float points[] = {
0.0f, 0.5f, 1.0f,
0.5f, -0.5f, 1.0f,
-0.5f, -0.5f, 1.0f
};
另外,我应该说,我注意到将float points[]
中的z值更改为0以外的任何值都会使得三角形中的那部分由于某种原因而不可见。
答案 0 :(得分:4)
A"顶点"其w
坐标为0被认为是无限远,因此无法显示。 w
为0用于表示方向,而不是点。
设置w
等于z
将删除任何深度感。点[x, y, z, w]
的实际3D坐标为[ x/w, y/w, z/w ]
(这是同质坐标的原理)。
通常,您将w
固定为1.0,并通过x
,y
和z
设置顶点位置。