【问题标题】:Check if object is looking at position检查对象是否正在查看位置
【发布时间】:2015-01-26 10:25:04
【问题描述】:

我正在尝试检查对象 (this.target) 是否正在查看特定位置 (newPosition)。我现在拥有的是以下内容:

new THREE.Matrix4().lookAt( newPosition, this.target.position, this.target.up ) == this.target.matrix

但由于某种原因,这行不通。您打算如何检查 Object3D 是否正在查看特定位置?

【问题讨论】:

  • Object3D.getWorldDirection( resultVector ) 将为您提供对象的方向。

标签: javascript rotation three.js coordinates


【解决方案1】:

这是行不通的,因为您的目标的矩阵不在同一个地方,并且可以进行不同的缩放以及各种各样的东西。

一个更好的技术是从你的眼睛物体投射光线,看看它是否击中了目标物体。

http://threejs.org/examples/#webgl_geometry_terrain_raycast

var raycaster = new THREE.Raycaster();

raycaster.setFromCamera( mouse, camera );

// See if the ray from the camera into the world hits one of our meshes
var intersects = raycaster.intersectObject( mesh );

【讨论】:

  • 好的,谢谢@Flux!只是我听说光线投射是一项昂贵的操作和东西。知道它到底有多贵吗?
  • 您可以随时使用 console.time() 对其进行基准测试。但是,计算机速度非常快,Javascript 也是如此。即使在 10 多年前的半条命 2 之类的游戏中,玩家实体也会不断地将光线投射到地板上,每帧进行许多操作。如果您害怕性能命中,您可以在每第 n 帧进行一次光线投射。您可以做的一件事是仅针对某些对象集(三个 raycaster 允许)进行光线投射,以便您可以过滤您只想投射的对象。
  • 好的,谢谢!反正我只需要它给玩家,所以我想我只是太早地考虑微优化(万恶之源)。光线投射也很完美!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-07
  • 2012-07-27
  • 1970-01-01
  • 1970-01-01
  • 2017-10-15
  • 1970-01-01
相关资源
最近更新 更多