2011-01-10 72 views
1

我用OpenGL繪製一個球體,它將由glRotate(),glScale(),glTranslate()進行轉換。 我怎樣才能獲得對象的絕對位置,而無需自行計算所有轉換?在OpenGL中變換相機位置

我需要這個座標來設置相機的眼睛位置。

回答

2

當使用這些轉換,你操縱的modelviewmatrix

要獲得當前的一個,你可以使用(http://linux.die.net/man/3/glgetfloatv

void glGetFloatv(
GLenum pname, 
GLfloat * params 
); 

例如:

float modelview[16]; 

// save the current modelview matrix 
glPushMatrix(); 

// get the current modelview matrix 
glGetFloatv(GL_MODELVIEW_MATRIX , modelview); 

應該讓你的當前矩陣,初始向量乘以/頂點這個矩陣/座標會給你絕對世界座標。

編輯:在製作應用程序時,您通常需要控制每個對象的絕對座標,操作它們,並使用opengl轉換將它們繪製在定義的位置。

1

對象通常在一個座標系中建模,然後縮放,翻譯並旋轉到您正在構建的世界中。世界座標系通過存儲在ModelView矩陣中的建模變換來轉換對象座標而產生。但是,OpenGL沒有世界座標的概念。世界座標純粹是一個應用程序構造。

對象座標由ModelView矩陣轉換以生成眼座標。

來自opengl.org: 9.120如何找到僅由ModelView矩陣轉換的頂點座標?

獲得頂點(即由ModelView矩陣變換的對象空間頂點)的眼睛座標空間值通常是有用的。您可以通過檢索當前的ModelView矩陣並執行簡單的向量/矩陣乘法來獲得此信息。

獲得其矩陣使用這樣的事情

float fvViewMatrix[ 16 ];

glGetFloatv(GL_MODELVIEW_MATRIX, fvViewMatrix);

您可以瞭解更多關於OpenGL的變換位置:http://www.opengl.org/resources/faq/technical/transformations.htm