我的任務是創建一個實現諸如簡單移動和Arcball界面等創意的OpenGL場景。我遇到的問題是處理NeHe的Arcball類(http://nehe.gamedev.net/data/lessons/lesson.asp?lesson=48)計算的旋轉矩陣。OpenGL旋轉矩陣和ArcBall
我有什麼到目前爲止是一個非常簡單的太陽系(只是地球,月亮和太陽)看起來很大。我想要的是讓相機跟隨用戶選擇的行星(通過點擊他們想要的行星),並使他們能夠使用鼠標拖動(arcball)以固定距離圍繞行星旋轉。正如我在開始時所說的,NeHe的課程正在基於鼠標點擊和拖動來生成旋轉矩陣。我想要應用矩陣的是相機位置。但是,當我這樣做時,我的相機只是在沒有旋轉過星球的情況下搖擺。所以我在猜測我要麼錯過了一些步驟,要麼我對自己想要做的事情有一種恐怖的理解。
這是從我的相機類的一些代碼對緊縮:
// transform is the matrix from NeHe's arcball interface
void camera::update(Matrix4fT transform) {
glm::mat4 transform_m = glm::mat4(0.0f);
// convert nehe's matrices to GLM matrix
for(int i=0; i < 4; i++)
for(int j=0; j < 4; j++)
transform_m[i][j] = transform.M[i*4+j];
// apply matrix to the position
glm::vec4 pos4 = glm::vec4(this->pos, 1.0f);
pos4 = transform_m * pos4;
this->pos = glm::vec3(pos4);
}
void camera::apply(planet *target) {
// called at the beginning of GLPaint
gluLookAt(this->pos.x,this->pos.y,this->pos.z, // cam->position
target->pos.x,target->pos.y,target->pos.z, // moving
this->up.x,this->up.y,this->up.z); // (0,1,0)
}
除此之外,訥河的函數被調用在正確的地方(點擊並拖動期間)......所以真的,我沒有想法從哪裏去。我希望有人能夠幫助我,如果你想看到整個代碼庫(用C++編寫並推入QTPanel),只需發一封電子郵件給我。
感謝,
卡爾·斯維爾(卡爾在carlsverre點com)
camera :: update中的「transform」矩陣究竟代表什麼? – 2009-06-10 19:31:46
據我所知,變換矩陣應該代表根據arcball類所需的球體旋轉。因此,如果用戶點擊球體上的x,y,z上的一個點並將鼠標移動到x2,y2,z2,則矩陣將表示球體將x,y,z移動到x2,y2,z2所需的旋轉。 希望是有道理的。 – 2009-06-10 19:44:21