所以我一直试图让这个工作,但到目前为止没有运气,希望你能帮忙.问题是我的项目中有一个摄像头,用户可以用鼠标和按钮自由移动.
目前是这样的:
move = new Vector3(0,0,-1)* moveSpeed;
move = new Vector3(0,0,1)* moveSpeed;
…
然后我只需将移动矢量添加到cameraPos矢量:cameraPos = move
然后问题是如果我旋转相机然后尝试移动,例如向下移动,它将不会直接向下移动但是以某个角度移动.我假设这是由于在本地轴上移动.但我想做的是在世界轴上移动.这样的事情是可能的,还是我必须以某种方式计算角度,然后在多个轴上移动?
最好的祝福!
编辑:
我正在旋转相机,其中cameraPos是相机的当前位置,旋转是相机的当前旋转.这是旋转相机的代码:
void Update()
{
...
if(pressed)
{
int newY = currentY - oldY;
pitch -= rotSpeed * newY;
}
Rotate();
}
void Rotate()
{
rotation = Matrix.CreateRotationX(pitch);
Vector3 transformedReference = Vector3.Transform(cameraPos, rotation);
Vector3 lookAt = cameraPos + transformedReference;
view = Matrix.CreateLookAt(cameraPos, lookAt, Vector3.Up);
oldY = currentY;
}
我希望这更具可读性.
最佳答案 我能够通过使用以下方法解决此问题:
Vector3 v;
if (state.IsKeyDown(Keys.Up))
v = new Vector3(0, 0, 1) * moveSpeed;
... //Other code for moving down,left,right
if (state.IsKeyDown(Keys.V))
view *= Matrix.CreateRotationX(MathHelper.ToRadians(-5f) * rotSpeed); //Multiplying view Matrix to create rotation
view *= Matrix.CreateTranslation(v); //Multiplying view Matrix to create movement by Vector3 v