2014-01-13 82 views
1

我有了這個頂點着色器乘以當對象消失。GLSL通過矩陣

這裏就是我設置MVP代碼:

mat4 model = translate(mat4(), vec3(0,0,0)); 
mat4 view = translate(mat4(), vec3(0,0,-10)); 
mat4 proj = perspective(90.0f, (float)1280/720, 0.001f, 1000.0f); 

mat4 MVP = model * view * proj; 

GLint uniform_loc = glGetUniformLocation(this->_shaderID, "MVP"); 
glUniformMatrix4fv(uniform_loc, 1, GL_FALSE, value_ptr(matrix)); 

我嘗試了不同的乘法訂單和着色器multiplicating。

+0

你從GLGeterror()中得到了什麼嗎?我認爲你必須在將'mat4'乘以它們之前將'vec3()'上傳到'vec4()'。絕對不要忘記,代碼在你的編程中不在你的GLSL中。你在'vec4()' – zero298

+0

中包裝它們順便說一句,你需要在片段着色器中使用剪輯空間位置('MVP * vertPosition')?從技術上講,它不是剪輯空間,因爲你切掉了重要的'W'組件(用於裁剪,因此名稱),但它似乎仍然不是特別有用。碎片着色器已經隱式地包含了一個在屏幕空間中定義的位置('gl_FragCoord'),這取決於你使用'fragPosition'的方式,你根本不需要它。 –

回答

0

你已經得到了多個MVP逆轉的順序。 OpenGL的矩陣乘法是列爲主右結合,因此它應該是

mat4 MVP = proj * view * model; 

0.0001的近裁剪平面距離是太低了。實際上,您將所有深度緩衝區分辨率壓縮到一個非常小的範圍內。儘可能靠近。

我不明白你爲什麼要爲fragPositionfragNormal選擇.rgb

+0

我試過這個命令。該着色器之前工作過。 –

+0

@LiessJemai:你的近剪輯平面距離也是有問題的。 – datenwolf

+0

好的,我正在修復這個問題。但是物體消失了,即使我只是乘以一個身份。 –

0

從你的例子看你已經忘記在設置制服之前設置着色器程序。在設置矩陣之前,嘗試使用glUseProgram(this->program);(取決於您存儲程序的位置)!