帮助 3D 相机课程
我正在尝试添加相机在 Y 轴上上下移动的功能,但目前尚不支持此功能。我尝试在按下 W 和/或 S 时添加 Y 值,但它无法正常工作。我需要什么样的公式?我知道这与音高和添加到 Y 轴有关。
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;
}
}
谢谢!
I am trying to add the ability for the camera to go up and down on the Y axis, something it currently does not support. I have tried adding to the Y value when W and or S is pressed but it doesn't work correctly. What kind of formula do I need? I know it has to do with the pitch and adding to the Y axis.
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;
}
}
Thanks!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
对于向前移动,这种效果应该起作用:
您可能必须反转符号,因为我不确定您的应用程序是否使用正 Y 值或负 Y 值进行向上移动。
For forward movement, something to this effect should work:
You may have to reverse the sign, as I'm not sure whether your application uses positive or negative Y values for upward movement.