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