【发布时间】:2016-06-26 14:11:53
【问题描述】:
我正在与 Three.js [r78] 合作,我在这方面和 JavaScript 上都相当菜鸟
我终于设法从一个半径等于 500 的球体中心的透视凸轮广播了一条光线,当我用浏览器检查时,交叉点的结果很好,但并不令人满意。我需要精确地将点cartesian or spherical doesn't matter 的坐标与同一点的纬度分开。当我选择一个特定点时,我会得到它的笛卡尔坐标的不同值。有时这些价值观并不遥远,有时却大相径庭。缩放 [鼠标滚轮] 存在问题,但不幸的是也没有更改它,就像在下面的示例中,我添加了一个白色标记以显示明显选择的点。真正点击的是红圈内的那个
这里从不同的视口可以看到相同的点,但缩放相同。我希望这两次尝试给出相同的值[当然,大约]。另一边我检查了相机到相交点的距离总是500-,所以碰撞点似乎是完美计算的
我的两个问题,然后是基本代码[其余来自Valiant360]:
- 用两个不同的坐标计算的同一个物理点[鼠标点击红圈]是这个 Three.js 版本的一个错误还是我忘记了什么/做错了什么?换句话说,我想为同一个物理点击点获得相同的坐标,独立于视口
- 如果是我的错,该怎么做才能修复它,并且可能具有相同的值也会改变缩放比例
提前感谢那些愿意提供帮助的人,
安东尼诺
onMouseDown: function(a)
{
[...]
// retrieving normalized coordinates
var mouse_2D_vector = new THREE.Vector2( ( event.clientX / window.innerWidth ) * 2 - 1,
-( event.clientY / window.innerHeight ) * 2 + 1);
this._raycaster.setFromCamera(mouse_2D_vector, this._camera);
var intersections = this._raycaster.intersectObjects( [this._mesh], true );
intersection = ( intersections.length ) > 0 ? intersections[ 0 ] : null;
if (intersections.length>0)
{
intersections[ 0 ].object.material.color.setHex( Math.random() * 0xffffff );
console.log("Intersected object.x:", intersections[ 0 ].point.x);
console.log("Intersected object.y:", intersections[ 0 ].point.y);
console.log("Intersected object.z:", intersections[ 0 ].point.z);
}
console.log('intersections.length: ' + intersections.length);
},
【问题讨论】:
标签: javascript three.js