我用OpenGL繪製一個球體,它將由glRotate(),glScale(),glTranslate()進行轉換。 我怎樣才能獲得對象的絕對位置,而無需自行計算所有轉換?在OpenGL中變換相機位置
我需要這個座標來設置相機的眼睛位置。
我用OpenGL繪製一個球體,它將由glRotate(),glScale(),glTranslate()進行轉換。 我怎樣才能獲得對象的絕對位置,而無需自行計算所有轉換?在OpenGL中變換相機位置
我需要這個座標來設置相機的眼睛位置。
當使用這些轉換,你操縱的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轉換將它們繪製在定義的位置。
對象通常在一個座標系中建模,然後縮放,翻譯並旋轉到您正在構建的世界中。世界座標系通過存儲在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