三个js,得到pointerlockcontrolsi面对的vector3
Posted
技术标签:
【中文标题】三个js,得到pointerlockcontrolsi面对的vector3【英文标题】:Three js, get the vector3 that pointerlockcontrolsi s facing 【发布时间】:2013-08-14 13:18:25 【问题描述】:想知道是否有可能获得指针锁定控件中偏航对象的朝向并将其用作光线投射器的方向。我一直在玩弄代码,试图在其中添加一些基本的射击游戏内容。我一直在尝试使用指针控件提供的偏航对象中的 X 和 Y 值在堆栈溢出时发现的一些东西,但没有运气。到目前为止,这是我所拥有的:
setupTarget: function()
//var vector = new THREE.Vector3(game.mouse.x, game.mouse.y, 0);
var yaw = game.controls.getObject();
var pitch = game.controls.pitchObject;
var vector = new THREE.Vector3(
yaw.position.x * Math.cos(pitch.rotation.x),
yaw.position.y * Math.sin(yaw.rotation.y),
0
);
var dir = vector.sub(yaw.position).normalize();
this.ray = new THREE.Raycaster(yaw.position.clone(), dir);
我知道这是错误的,除了它不起作用。对基于旋转计算 x 和 y 平移的一些数学运算感到困惑,但这显然不适用于目标。
【问题讨论】:
我认为你可以通过new THREE.Raycaster(this.position, this.rotation)
来获得指向物体正在看的方向的光线。
我确实试了一下,但没有成功:(
您的问题是“我如何在使用PointerLockControls
时获得相机的方向?”。
好的。改变你的问题和标题,我会给你答案。 :-)
【参考方案1】:
将以下内容添加到您的 PointerLockControls
副本中(或等待几天再发布下一个版本):
this.getDirection = function()
// assumes the camera itself is not rotated
var direction = new THREE.Vector3( 0, 0, -1 );
var rotation = new THREE.Euler( 0, 0, 0, "YXZ" );
return function( v )
rotation.set( pitchObject.rotation.x, yawObject.rotation.y, 0 );
v.copy( direction ).applyEuler( rotation );
return v;
();
three.js r.59
【讨论】:
非常感谢。我没有传入向量,而是将 v 设置为:var v = yawObject.position.clone();
不要在紧密的循环中使用clone()
或new
-- 重复使用v
。【参考方案2】:
好吧,使用新版本它不起作用。我必须添加
var v = new THREE.Vector3( 0, 0, -1 );
之前
v.copy( direction ).applyEuler( rotation );
因为 Firefox 无法识别 v.
【讨论】:
three.js r.62 中实现的功能应该可以在 Firefox 和任何其他浏览器中正常工作。如果您遇到问题,您需要发一个新帖子。 我最终做的有点不同(反对西方的可靠建议)github.com/agmcleod/7dfps2013/blob/master/js/…。通常,尽管您想要做的是将矢量对象传递给 getDirection 函数调用。以上是关于三个js,得到pointerlockcontrolsi面对的vector3的主要内容,如果未能解决你的问题,请参考以下文章
关于微信js-sdk 具体怎么弄主要是timestamp: nonceStr: signature: 这三个值,用js怎么得到,不用php
c# 求WPF省市区三级联动代码,是从xml中得到省市区数据后添加到三个下拉列表。