3

在处理 2+ 时,如何制作一个可以移动并围绕自己的轴旋转的相机?

我有一个相机,我可以在世界空间中移动并进行某种旋转:

frustum(-10,10,-10,10,10,2000);
translate(camX,camY,camZ);//I move around by adding to these values when a button is pressed
rotate(angleX,1,0,0);//same here...
rotate(angleY,0,1,0);
rotate(angleZ,0,0,1);

但是问题在于旋转在场景中居中,这意味着当远离场景的中心坐标移动时,我会得到非常奇怪的旋转。当我在旋转之前翻译时为什么会发生这种情况?

4

1 回答 1

3

感谢 Nicolás Carlo 和他建议观看Jorge Rodriguez 制作的这个 Youtube 播放列表,我能够修复我几乎第一次做的事情。

我所要做的只是做一些简单的三角计算,从我得到的角度得到前向矢量,然后将相机位置添加到 camera() 中的 centerX、centerY、centerZ 值;

前任。其中 camPos 是当前位置 3D 向量,而 vecForward 是我需要的计算出的 3D 前向向量。

vecForward.x = cos(yaw)*cos(pitch);
vecForward.y = sin(pitch);
vecForward.z = sin(yaw)*cos(pitch);

camera(camPos.x,camPos.y,camPos.z, camPos.x+vecForward.x,camPos.y+vecForward.y,camPos.z+vecForward.z, 0,1,0);

如果有些人不知道,Pitch 是上下角度,Yaw 是相机的左右角度。

作为最后一点,我强烈建议观看 Carlo 建议的 Rodriguez “游戏开发者的数学”,因为每个视频都至少一次解释了针对不同问题的最重要/最常用的数学解决方案之一,然后在结尾。

于 2014-04-20T21:00:08.977 回答