0
我創建了一個網格來表示地面走路。沒有gluLookAt的旋轉相機NOT場景
我有我的方向鍵連接起來旋轉/移動視圖:
switch(currentKey)
{
case sf::Key::Up:
z_trans+=1;
break;
case sf::Key::Down:
z_trans-=1;
break;
case sf::Key::Left:
y_angle-=0.5;
break;
case sf::Key::Right:
y_angle+=0.5;
break;
}
隨着z_trans是在z上的翻譯,y_angle是在glRotatef在y軸的旋轉()。
我可以讓我的角色向前走,然後左右轉,然後繼續沿着他所面對的方向行走。唯一的問題是,當我離開原點(0,0,0)時,旋轉發生在原點周圍,而不是相機。所以如果我距離原點100個單位,我的角色基本上是遵循100個半徑圓的路徑。
沒有使用gluLookAt,沒有人有任何想法如何實現這個?完全難住,在這裏坐了好兩個小時試圖找出答案。
的完整代碼:
float elapsedTime=Clock.GetElapsedTime();
if(elapsedTime>REFRESH_RATE){
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glTranslatef(x_trans, y_trans, z_trans); // y_trans == -25.f to keep us above the plane
glRotatef(x_angle,1,0,0);
glRotatef(y_angle,0,1,0);
glRotatef(z_angle,0,0,1);
currentKey=sf::Key::Num9;
if (Event.Type == sf::Event::KeyPressed) currentKey = Event.Key.Code;
switch(currentKey)
{
case sf::Key::Up:
z_trans+=1;
break;
case sf::Key::Down:
z_trans-=1;
break;
case sf::Key::Left:
y_angle-=0.5;
break;
case sf::Key::Right:
y_angle+=0.5;
break;
}
drawGrid();
Clock.Reset();
}
我得到的問題,那個軸不旋轉。如同,我可以面對我的右側90度,我會按向上移動'前進',我會移動到我的左側。 – Dezachu
如果我調整RotY,RotX和Player變量..我得到正確的結果。 這就是正確的操作順序。 – JohnD
嗨,JohnD,我正在尋找Android中的平移功能,如移動GLSurfaceview,而不是對象[我需要使用觸摸事件來移動GLSurfaceview]。如果你現在有任何想法,請給出任何示例代碼。對我來說完成我的任務會有所幫助。我在這裏奮鬥。我的示例代碼在這裏.http://www.mediafire.com/?09f9q51xnqhq2l7.which – harikrishnan