P5.js 相机无法使用多个旋转矩阵
P5.js camera not working with multiple rotation matrices
我一直在 p5.js 中为游戏和随机项目制作 3D 第一人称相机,但遇到了一些麻烦。
一段时间以来,我一直在我的项目中使用单个 y 旋转矩阵,以允许玩家环顾四周,但我最近想升级一下,所以我决定使用 x 和 y我的相机代码的旋转矩阵。我能够通过将两个计算出的 z 值相除来拼凑一个系统,但存在一些问题,更不用说这不是旋转矩阵的工作方式。我最近尝试进行适当的实施,但遇到了一些问题。
我一直在使用这个:camera(0, 0, 0, -200*sin(rot.y), -200*sin(rot.x), (200*cos(rot.x)) + (200*cos(rot.y)), 0, 1, 0);
作为我的测试相机代码,这在理论上是可行的,但在实际设置中,由于某种原因,它并不适用,如您所见here.现在,如果你环顾四周太远,它会随机散开并弄乱你正在寻找的方式。
我也可以确认我使用的公式是正确的 here。我使用(几乎)完全相同的代码来计算这些值,它看起来完全没问题。
使用 p5.js 相机有什么奇怪的技巧吗?或者这是需要修复的错误吗?
您实际上没有正确的公式。您显示的示例使用 orbitControl()
,而不是 camera
。它也没有旋转的两个不同角度。
camera()
的中间 3 个坐标定义了相机指向的点。这意味着您希望该点移动的方式与您希望相机焦点移动的方式相同。像这样在那个点画一个框可能会有所帮助(在你的原件中):
push();
translate(-200*sin(rot.y), -200*sin(rot.x), (200*cos(rot.x)) + (200*cos(rot.y)));
box(50);
pop();
您会注意到盒子与相机的距离并不总是相同。它停留在一个大半径和小半径都是 200 的圆环上。你想要的是一个半径为 200 的球体(实际上它可以有任何半径)。
您定义这三个坐标的方式取决于您希望用户交互的方式。这是一种方法:
camera(0, 0, 0,
cos(rot.x) * cos(rot.y),
cos(rot.x) * sin(rot.y),
sin(rot.x),
0, 0, 1);
这会根据纬度和经度指向相机,北极在正 Z 轴上。鼠标左右移动影响经度,上下移动影响纬度
我一直在 p5.js 中为游戏和随机项目制作 3D 第一人称相机,但遇到了一些麻烦。
一段时间以来,我一直在我的项目中使用单个 y 旋转矩阵,以允许玩家环顾四周,但我最近想升级一下,所以我决定使用 x 和 y我的相机代码的旋转矩阵。我能够通过将两个计算出的 z 值相除来拼凑一个系统,但存在一些问题,更不用说这不是旋转矩阵的工作方式。我最近尝试进行适当的实施,但遇到了一些问题。
我一直在使用这个:camera(0, 0, 0, -200*sin(rot.y), -200*sin(rot.x), (200*cos(rot.x)) + (200*cos(rot.y)), 0, 1, 0);
作为我的测试相机代码,这在理论上是可行的,但在实际设置中,由于某种原因,它并不适用,如您所见here.现在,如果你环顾四周太远,它会随机散开并弄乱你正在寻找的方式。
我也可以确认我使用的公式是正确的 here。我使用(几乎)完全相同的代码来计算这些值,它看起来完全没问题。
使用 p5.js 相机有什么奇怪的技巧吗?或者这是需要修复的错误吗?
您实际上没有正确的公式。您显示的示例使用 orbitControl()
,而不是 camera
。它也没有旋转的两个不同角度。
camera()
的中间 3 个坐标定义了相机指向的点。这意味着您希望该点移动的方式与您希望相机焦点移动的方式相同。像这样在那个点画一个框可能会有所帮助(在你的原件中):
push();
translate(-200*sin(rot.y), -200*sin(rot.x), (200*cos(rot.x)) + (200*cos(rot.y)));
box(50);
pop();
您会注意到盒子与相机的距离并不总是相同。它停留在一个大半径和小半径都是 200 的圆环上。你想要的是一个半径为 200 的球体(实际上它可以有任何半径)。
您定义这三个坐标的方式取决于您希望用户交互的方式。这是一种方法:
camera(0, 0, 0,
cos(rot.x) * cos(rot.y),
cos(rot.x) * sin(rot.y),
sin(rot.x),
0, 0, 1);
这会根据纬度和经度指向相机,北极在正 Z 轴上。鼠标左右移动影响经度,上下移动影响纬度