2
所以我对OpenGL相当陌生,我一直在尝试使用GLSL,当然,我遇到了一些问题。首先,我应该注意到我目前只绘制了一个单一的三角形。其次,这里是我的(很简单)着色器:困惑于GLSL和OpenGL
// 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);
}
这工作的很好,画一个三角形。大。现在,我想编辑顶点着色引擎,从而取代
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以外的任何东西,使三角形出于某种原因不可见的部分。
好的,如果我将'float points []'的Z'编辑为1,它应该设置W = 1,但是这仍然不显示任何内容。不是'vertex_position.z'应该得到给定顶点的Z值吗?如果Z值为1,那么我的代码应该自动将W设置为1? – Nooble 2014-09-10 20:25:49
@Nooble:恩,NDC中Z = 1的坐标表示您将顶点从剪辑空间中移出,因此所有的顶点都会被裁剪掉。你应该阅读如何正确转换。即建立一个模型和一个投影矩阵以及这些工作。 – datenwolf 2014-09-10 20:58:29
@Angew我知道如何使用矩阵,我只是对此感到好奇。除零之外的任何_at_ _all_似乎都将其推出剪辑空间。例如,0.5,介于-1到1之间。说到-1到1,它是否包含在内? – Nooble 2014-09-10 22:40:31