首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >P5.js相机无法使用多个旋转矩阵

P5.js相机无法使用多个旋转矩阵
EN

Stack Overflow用户
提问于 2021-05-22 07:54:52
回答 1查看 33关注 0票数 1

我已经花了一段时间用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相机有什么奇怪的技巧吗?或者这是一些需要修复的错误?

EN

Stack Overflow用户

回答已采纳

发布于 2021-05-22 12:31:20

你实际上没有正确的公式。您展示的示例使用的是orbitControl(),而不是camera。它也没有两个不同的旋转角度。

camera()的中间3个坐标定义相机指向的点。这意味着您希望该点以您希望相机焦点移动的方式移动。在这一点上画一个方框可能会有帮助(在你的原始版本中):

代码语言:javascript
运行
复制
push();
translate(-200*sin(rot.y), -200*sin(rot.x), (200*cos(rot.x)) + (200*cos(rot.y)));
box(50);
pop();

您将注意到,长方体与相机的距离并不总是相同的。它停留在主半径和次半径均为200的圆环上。你想要的是一个半径为200的球体(实际上它可以有任何半径)。

定义这三个坐标的方式取决于您希望用户交互的方式。这里有一种方法:

代码语言:javascript
运行
复制
camera(0, 0, 0,
       cos(rot.x) * cos(rot.y),
       cos(rot.x) * sin(rot.y),
       sin(rot.x),
       0, 0, 1);

这将根据纬度和经度指向相机,其中北极位于正Z轴上。向右和向左移动鼠标会影响经度,向上和向下移动鼠标会影响纬度。

票数 1
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67644937

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档