2012-11-16 19 views
0

我有這段代碼,我正在使用我正在使用的引擎的測試。奇怪的ATI vs Nvidia TRIANGLE_STRIP問題

在我的NVIDIA NVS 4200M上,按預期顯示GL_TRIANGLE_STRIP。 在我的ATI Radeon 5800上,它似乎畫了一個三角形。

shader.begin(); 

    Matrix4<float> temp = getActiveCamera()->getProjectionMatrix() * getActiveCamera()->getObjectToWorld().fastInverse(); 

    glUniformMatrix4fv(shader["mvp"], 1, GL_TRUE, temp.getArray()); 

    glBegin(GL_TRIANGLE_STRIP); 

     glVertexAttrib3f(shader["colour"],0,1,0); 
     glVertexAttrib3f(shader["coord3d"],-.5,-.5,0); 

     glVertexAttrib3f(shader["colour"],1,1,0); 
     glVertexAttrib3f(shader["coord3d"],0.5,-.5,0); 

     glVertexAttrib3f(shader["colour"],1,0,1); 
     glVertexAttrib3f(shader["coord3d"],-.5,.5,0); 

     glVertexAttrib3f(shader["colour"],0,1,1); 
     glVertexAttrib3f(shader["coord3d"],.5,.5,0); 

    glEnd(); 

shader.end(); 

下面是它在我的兩臺電腦上的實際外觀。

https://www.dropbox.com/s/sgm2j978tx2ipnp/not%20working.png

https://www.dropbox.com/s/27idv0b8k0p4pcx/working.png

+0

你把'coord3d'賦給屬性0了嗎? –

回答

1

這個問題可以通過移動到更高版本的GLSL是固定的,我現在用的330,除了我切換到使用的#Version 330使我的所有屬性「在」使我變化「出」和使用佈局(位置=#)。

0

什麼是你的相機投影和模型視圖矩陣的值是多少?如果它們是標準的(從最初開始沒有變化),你應該向下看-Z軸,在這種情況下兩個三角形的接縫應該從(.5,-.5)到(-.5,.5) )(從右下角到左上角)。在ATI卡的情況下,這不是真的(它從左下到右上)。如果您實際上正在查看三角形的背面,則該卡的OpenGL驅動程序可能會剔除面部。如果這是真的,我不會期望它畫任何東西,但你永遠不知道。

對此的一個測試是調用glDisable(GL_CULL_FACE)並查看它是否繪製了您所期望的。

參考面部剔除: http://www.khronos.org/opengles/documentation/opengles1_0/html/glCullFace.html

玩得開心,

+0

兩臺計算機的攝像頭矩陣相同,我只是在兩臺計算機上運行項目,而且我需要在兩臺計算機上都能正常工作,無需更改代碼。那麼爲了在兩臺計算機上都能正常工作,我需要做些什麼?當我關閉撲殺時,我看到另一點,所以它是一半朝前,一半朝後。 – Baraphor