2012-11-19 11 views
0

說,我已經給了一個點[x,y,z]。我應用了一些變換矩陣(由縮放,旋轉和平移組成)。當然,我可以編寫自己的例程來獲得最終變換點的座標。在opengl中是否有任何內置函數可以相同..在opengl中的內置函數來獲得最終變換點的座標

這種類型的函數可能會被很好的優化,我寫的可能不會那麼有效。

回答

0

您可以使用gluProject()

glMatrixMode(GL_MODELVIEW); 
glLoadIdentity(); 
glRotatef(90, 0, 0, 1); 
GLdouble modelview[16] = { 0 }; 
glGetDoublev(GL_MODELVIEW_MATRIX, modelview); 

GLdouble identity[16] = { 
    1, 0, 0, 0, 
    0, 1, 0, 0, 
    0, 0, 1, 0, 
    0, 0, 0, 1 
}; 
GLint view[4] = { -1, -1, 2, 2 }; 

// rotate (1,0,0) by 90 degrees around the Z axis: 
double x, y, z; 
gluProject(1, 0, 0, modelview, identity, view, &x, &y, &z); 
z = (z * 2) - 1; 

// x,y,z should equal (0,1,0) 

雖然你會更好使用適當的矩陣庫就像Eigen,因爲它只是一個矩陣向量乘法。

+0

你提供了一些相當「舊」的openGL代碼。目前最好使用一些第三方庫(比如你寫的)。例如,我對GLM很滿意 – fen