2010-10-20 58 views
5

我試圖渲染二維半平面OpenGL中使用下面的代碼點:OpenGL的:三角形與無限

void renderHalfplane(double *x, double *n) 
{ 
    glPushMatrix(); 
    double theta = -360.0 * atan2(n[0], n[1])/(2.0*PI); 

    glTranslated(x[0], x[1], 0); 
    glRotated(theta, 0, 0, 1.0); 

    glBegin(GL_TRIANGLES); 
    glVertex4d(0.0, 0.0, 0.0, 1.0); 
    glVertex4d(1.0, 0.0, 0.0, 0.0); 
    glVertex4d(0.0,-1.0, 0.0, 0.0); 
    glVertex4d(0.0, 0.0, 0.0, 1,0); 
    glVertex4d(-1.0,0.0, 0.0, 0.0); 
    glVertex4d(0.0,-1.0, 0.0, 0.0); 
    glEnd(); 

    glPopMatrix(); 
} 

這裏我使用齊次座標在繪製與兩個頂點的三角形「無窮。」

此代碼的工作就像我的計算機上的魅力,但用戶報告它不能正確地呈現在他們:不是他們所看到的兩(有限)三角形的無限半平面。

是我使用W-座標0未定義行爲?這是否只適用於某些版本的OpenGL?我嘗試通過Khronos OpenGL規範查找,但找不到用w座標0呈現基元的部分。

+0

什麼是你的用戶的設備? – Bahbar 2010-10-20 18:36:40

+0

根據用戶,他正在使用一臺運行Ubuntu的筆記本電腦與Mesa OpenGL驅動程序。我有一個Ubuntu的桌面,但是當我在那裏測試代碼時,它的效果很好。 – user168715 2010-10-20 18:41:02

+0

使用w = 0是很奇怪的......你應該在不同的圖形卡驅動程序上測試它。 – Luca 2010-10-22 05:15:17

回答

1

我測試了我的機器(的NVIDIA Quadro)並將其正確呈現。我發現代碼樣本(用於陰影體積)可以將W座標縮放到無窮大,這也可以很好地工作。

我會想這是一個驅動程序問題或外在的東西給這個代碼?

+0

問題是什麼?你有沒有設法解決它? – 2010-10-25 19:29:58

+0

好奇也...我使用這種技術,並想知道它是不可靠的。 – 2011-01-30 20:35:55

+0

不,我從來沒有讓它工作,所以我改變了我做渲染的方式。從我讀過的片段* *應該是正確的,我的猜測是有問題的梅薩司機老/不符合規範的/越野車。 – user168715 2012-08-27 23:42:09