我有一個簡單的頂點着色器OpenGL的頂點着色器轉換和輸出
#version 330 core
uniform mat4 projectionMatrix;
uniform mat4 viewMatrix;
uniform mat4 modelMatrix;
in vec3 in_Position;
out vec3 pass_Color;
void main(void)
{
//gl_Position = projectionMatrix * viewMatrix * modelMatrix * vec4(in_Position, 1.0);
gl_Position = vec4(in_Position, 1.0);
pass_Color = vec3(1,1,1);
}
在我的客戶端代碼,我
glm::vec4 vec1(-1,-1,0,1);//first
glm::vec4 vec2(0,1,0,1);//second
glm::vec4 vec3(1,-1,0,1);//third
glm::mat4 m = projectionMatrix * viewMatrix * modelMatrix;
//translate on client side
vec1 = m * vec1;
vec2 = m * vec2;
vec3 = m * vec3;
//first vertex
vertices[0] = vec1.x;
vertices[1] = vec1.y;
vertices[2] = vec1.z;
//second
vertices[3] = vec2.x;
vertices[4] = vec2.y;
vertices[5] = vec2.z;
//third
vertices[6] = vec3.x;
vertices[7] = vec3.y;
vertices[8] = vec3.z;
現在我的問題,如果我在着色器,沒有在不使用矩陣乘法客戶端代碼,這將使我成爲一個很好的三角形,使整個屏幕擴大,所以我把它的頂點着色器地圖座標系給它的座標系統中的屏幕x=-1..1
和y=-1..1
如果我在着色器中進行矩陣乘法,一切都很好。但是,如果我註釋掉了着色器中的代碼,並在客戶端上執行,我會得到奇怪的結果。它不應該產生相同的結果?
我是否錯誤地認爲頂點着色器gl_Position
的輸出是2D座標,儘管它是vec4
?
感謝您的任何幫助。我真的很想了解頂點着色器的輸出是以頂點位置爲準的。
的projectin字模其實修改一個vec4的最後一個組件,並且您不要忽略這最後的價值是很重要的。 opengl將gl_Position從{x,y,z,w}轉換爲{x/w,y/w,z/w,1} – Arne 2013-09-21 21:45:33