处理相机视锥体()和透视()旋转

时间:2014-04-18 13:49:55

标签: camera rotation center processing frustum

在处理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);

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

1 个答案:

答案 0 :(得分:2)

感谢NicolásCarlo和他建议观看Jorge Rodriguez制作的This Youtube playlist,我能够解决我第一次做的差事。

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

实施例。其中camPos是当前位置3D-Vector和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是相机的左右角。

作为最后一点,我强烈建议观看罗德里格兹“游戏开发人员的数学”,因为每个视频解释了至少一个最重要/经常使用的数学解决方案,同时解决了不同的问题然后给出了最后的例子。

相关问题