如何在A-Frame中检测相机和球体的距离
How to detect camera and sphere's distance in A-Frame
我正在尝试在相机靠近球体时显示一些文本。这个想法是当用户看到球体移动得更近时,文本就会出现,比方说,"Hello"。但是现在我只知道如何使用实体添加固定位置的文本,我不知道如何检测相机和球体之间的距离,并在用户看到球体靠近时显示文本。
这是我的代码:
<html>
<head>
<script src="https://aframe.io/releases/0.7.0/aframe.min.js"></script>
</head>
<body>
<a-scene>
<a-sphere position="0 0 0" perspective="true" radius="1.5" color="#aaa" id="sphere1"></a-sphere>
<a-entity position="4.5 2 0" text="width: 10; color: white; value: Hello"></a-entity>
<a-sky color="#000"></a-sky>
<a-entity class="camwrap" position="0 0 0">
<a-camera look-controls wasd-controls="fly:true acceleration:1" near="1" position="0 0 20" user-height="0" fov="60">
</a-camera>
</a-entity>
</a-scene>
<script>
const cam = document.querySelector("a-camera");
setTimeout(function() {
cam.components["wasd-controls"].keys["KeyW"] = true;
}, 1000);
</script>
</body>
有什么想法吗?
如果您知道相机位置和球体位置 - 您可以计算距离:
1) sqrt((x1 - x2)^2 + (y1 - y2)^2 + (z1 - z2)^2)
,
2) 或使用 THREE.js a.distanceTo(b)
method.
将您的计算放入自定义组件中,并在 tick
函数中检查距离:
init: function() {
this.cam = document.querySelector("[camera]")
this.sphere = document.querySelector("a-sphere")
},
tick: function() {
let camPos = this.cam.object3D.position
let spherePos = this.sphere.object3D.position
let distance = camPos.distanceTo(spherePos)
if (distance < 5) {
// camera closer than 5m, do something
}
}
在 this fiddle 中查看。
您也可以在主球体周围制作一个不可见的球体,
并使用碰撞检测使文本出现。
碰撞检测内置于 aframe.extras.js
我正在尝试在相机靠近球体时显示一些文本。这个想法是当用户看到球体移动得更近时,文本就会出现,比方说,"Hello"。但是现在我只知道如何使用实体添加固定位置的文本,我不知道如何检测相机和球体之间的距离,并在用户看到球体靠近时显示文本。 这是我的代码:
<html>
<head>
<script src="https://aframe.io/releases/0.7.0/aframe.min.js"></script>
</head>
<body>
<a-scene>
<a-sphere position="0 0 0" perspective="true" radius="1.5" color="#aaa" id="sphere1"></a-sphere>
<a-entity position="4.5 2 0" text="width: 10; color: white; value: Hello"></a-entity>
<a-sky color="#000"></a-sky>
<a-entity class="camwrap" position="0 0 0">
<a-camera look-controls wasd-controls="fly:true acceleration:1" near="1" position="0 0 20" user-height="0" fov="60">
</a-camera>
</a-entity>
</a-scene>
<script>
const cam = document.querySelector("a-camera");
setTimeout(function() {
cam.components["wasd-controls"].keys["KeyW"] = true;
}, 1000);
</script>
</body>
有什么想法吗?
如果您知道相机位置和球体位置 - 您可以计算距离:
1) sqrt((x1 - x2)^2 + (y1 - y2)^2 + (z1 - z2)^2)
,
2) 或使用 THREE.js a.distanceTo(b)
method.
将您的计算放入自定义组件中,并在 tick
函数中检查距离:
init: function() {
this.cam = document.querySelector("[camera]")
this.sphere = document.querySelector("a-sphere")
},
tick: function() {
let camPos = this.cam.object3D.position
let spherePos = this.sphere.object3D.position
let distance = camPos.distanceTo(spherePos)
if (distance < 5) {
// camera closer than 5m, do something
}
}
在 this fiddle 中查看。
您也可以在主球体周围制作一个不可见的球体, 并使用碰撞检测使文本出现。 碰撞检测内置于 aframe.extras.js