2011-06-12 80 views
2

我想添加相机在Y轴上上下的能力,它目前不支持。当按下W和或S时,我尝试添加Y值,但无法正常工作。我需要什么样的配方?我知道它与音高有关,并加到Y轴上。帮助3d相机类

void WALKING_CAMERA::Update(double time) 
{ 
    //calculate the distance to move, based on time passed 
    static double lastTime=time; 
    double timePassed=time-lastTime; 
    lastTime=time; 

    float distance=speed*(float)timePassed/1000; 

    //Get the mouse position 
    POINT mPos; 
    GetCursorPos(&mPos); 

    angleYaw+=((float)mPos.x-320.0f)*speed/20; 
    anglePitch+=((float)mPos.y-240.0f)*speed/20; 

    //make sure angleY is not too great 
    if(anglePitch>85.0f) 
     anglePitch=85.0f; 

    if(anglePitch<-85.0f) 
     anglePitch=-85.0f; 

    //set the mouse back to the centre of the screen 
    SetCursorPos(320,240); 

    //move forward/back or strafe 
    if(window.isKeyPressed(VK_UP) || window.isKeyPressed('W')) 
    { 
     position.x += (float)sin(angleYaw*M_PI/180)*distance*25; 
     position.z -= (float)cos(angleYaw*M_PI/180)*distance*25; 
    } 

    if(window.isKeyPressed(VK_DOWN) || window.isKeyPressed('S')) 
    { 
     position.x -= (float)sin(angleYaw*M_PI/180)*distance*25; 
     position.z += (float)cos(angleYaw*M_PI/180)*distance*25; 
    } 

    if(window.isKeyPressed(VK_RIGHT) || window.isKeyPressed('D')) 
    { 
     position.x += (float)cos(angleYaw*M_PI/180)*distance*25; 
     position.z += (float)sin(angleYaw*M_PI/180)*distance*25; 
    } 

    if(window.isKeyPressed(VK_LEFT) || window.isKeyPressed('A')) 
    { 
     position.x -= (float)cos(angleYaw*M_PI/180)*distance*25; 
     position.z -= (float)sin(angleYaw*M_PI/180)*distance*25; 
    } 
} 

谢谢!

回答

0

向前移动,东西这个效果应该工作:

position.y += (float)sin(anglePitch * M_PI/180) * distance * 25; 

您可能要逆转的迹象,因为我不知道您的应用程序是否使用正或负Y值向上运动。

+0

太棒了。谢谢!它最终也是消极的。 – 2011-06-12 00:59:34