gpt4 book ai didi

JavaScript:轨道相机的半工作公式

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:21:22 26 4
gpt4 key购买 nike

我一直在使用 phoria.js并且真的从中得到了乐趣。我有一个玩家头像模型,并且一直在使用第一人称相机。 phoria.js 相机使用 3D 空间的两个坐标定位:第一个:相机在场景图中的实际位置,第二个:相机注视的点。我一直在使用两个 Angular :angleXangleY以度数定义(我知道弧度更好)以便于思考以及 10 个单位的恒定距离。

fp 相机的代码如下

{within an object definition}
setLookAtByAngle: function(camera, angleX, angleY) {
lookAt = {x: camera.position.x, y: camera.position.y, z: camera.position.z};
extent = 10;

lookAt.x += Math.tan(angleX * (Math.PI / 180)) * extent;
lookAt.y += Math.tan(angleY * (Math.PI / 180)) * extent;
lookAt.z += extent;

camera.lookat = lookAt;
},

getAngleByLookAt: function(camera) {
xPlanarLookAt = {x: camera.lookat.x, y: camera.position.y, z: camera.lookat.z};
yPlanarLookAt = {x: camera.position.x, y: camera.lookat.y, z: camera.lookat.z};

hypotX = getDistanceBetweenTwoPoints(camera.position, xPlanarLookAt);
oppX = Math.abs(camera.lookat.x - camera.position.x);
angleX = Math.asin(oppX / hypotX) * (180/Math.PI);

hypotY = getDistanceBetweenTwoPoints(camera.position, yPlanarLookAt);
oppY = Math.abs(camera.lookat.y - camera.position.y);
angleY = Math.asin(oppY / hypotY) * (180/Math.PI);

return {x: angleX, y: angleY};
},
{continue object definition}

.到目前为止,我拥有的第三人称相机使用我自己的 SpaceUtils .它占据观察者的位置1和倒置的 x[2],y[3] Angular 并调用 SpaceUtils.translateByAngle([1], [2], [3], 10)将 10 作为距离常数,稍后在我添加缩放功能时与 FOV 一起修改。

SpaceUtils看起来像

SpaceUtils = {
degSin: function(theta) {
return Math.sin(theta * (Math.PI / 180));
},
degCos: function(theta) {
return Math.cos(theta * (Math.PI / 180));
},
degTan: function(theta) {
return Math.tan(theta * (Math.PI / 180));
},

translateByAngle: function(pos, angleX, angleY, distance) {
dest = {x: pos.x, y: pos.y, z: pos.z};

dest.z += distance * SpaceUtils.degSin(angleY);
hyp = distance * SpaceUtils.degCos(angleY);
dest.x += hyp * SpaceUtils.degCos(angleX);
dest.y += hyp * SpaceUtils.degSin(angleX);

return dest;
}
};

我的计算器有 Pol() 和 Rec() 函数,它们在 2D 中完成工作。我想我只需要其中一个用于 3D,所以我开始实现。这一切都适用于四个 x > 0象限,但在我穿过 x == 0 时将相机向下推其中 y > 0 (y 是上下轴)所以当我从 x > 0 开始时和 y > 0 ,我最终得到 x < 0y < 0什么时候y > 0应该是这样的。

简而言之,我需要一个以度为单位的 3D Rec(r, theta) 函数,但如果不是特意写的,弧度也可以。

我意识到这是一个相当大的要求,所以如果涉及到这个问题,我会悬赏 50 或 100 个代表。

最佳答案

Phoria 使用 x 表示向前-向后,y 表示向上-向下,z 表示横向,而传统数学则交换 y 和 z 的用途。你应该这样做。 SpaceUtils 中的最后一个函数应该遵循以下内容。

translateByAngle: function(pos, angleX, angleY, distance) {
dest = {x: pos.x, y: pos.y, z: pos.z};

dest.y += distance * SpaceUtils.degSin(angleY);
hyp = distance * SpaceUtils.degCos(angleY);
dest.x += hyp * SpaceUtils.degSin(angleX);
dest.z += hyp * SpaceUtils.degCos(angleX);

return dest;
}

关于JavaScript:轨道相机的半工作公式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30572935/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com