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