gpt4 book ai didi

javascript - 确定场景中物体的相机可见 x,y

转载 作者:行者123 更新时间:2023-11-28 04:22:46 24 4
gpt4 key购买 nike

我正在尝试确定世界中对象(BoxGeometry)相对于屏幕(视锥体)而不是世界的位置(x,y,z 坐标)。 frustum.intersectsObject(…) 方法只是返回一个 bool 值,我想确定哪个象限 ([-x,y],[x,y],[x,-y],[-x,-y]) 是一个盒子是相对于相机的(下面屏幕截图中的红线跟随相机而不是场景)。现在,只要相机不旋转( room.children[i].position.x ),一切都会正常,因为相机和世界具有相同的坐标,但当我旋转相机时,这不起作用。

我认为事情出现在if (frustum.intersectsObject(room.children[i])) {中那不应该的。 (见下图)

我是 Three.js 的新手,所以可能有一种我没有遇到过的简单方法可以做到这一点。如果由于某种原因没有,实现这样的事情最简单的方法是什么?谢谢!!

    function onDocumentKeyDown(event) {
event.preventDefault();
var frustum = new THREE.Frustum();
frustum.setFromMatrix(new THREE.Matrix4().multiply(camera.projectionMatrix));
for (var i = 0; i < room.children.length; i++) {
if (frustum.intersectsObject(room.children[i])) {
var XYZ=new THREE.Vector4();
XYZ.copy(room.children[i].position).applyMatrix4(camera.matrixWorldInverse);
console.log(i, 'left', frustum.intersectsObject(room.children[i]), XYZ.x,XYZ.y,XYZ.z,XYZ.w, room.children[i].material.emissive.getHex());
if (XYZ.x < 0 && XYZ.y > 0 && (event.keyCode === 103 || event.keyCode === 13) ) {
if (room.children[i].material.emissive.getHex() !== 255) {
$('#score').text(score++);
room.children[i].material.emissive.setHex(0x00ff00);
console.log(frustum);
console.log(i, 'WHAT ARE THE BOUNDING BOX COORDINATES OF THIS BOX????');
}
}
}
}
}

Determining the location of an object in the world with respect to the screen (frustum) and not the world.

最佳答案

Vector3.project( camera )方法似乎可以满足您的要求。这将为您提供标准化设备坐标中对象的位置,该坐标在 x 和 y 方向上的范围应为 -1 到 1。

vector.set( x, y, z ) // or vector.copy( ...)
vector.project( camera )
if ( vector.x <= 0 ) {
...
}

如果对象位于 View 的左半部分,则应该为 true,尽管我还没有测试过。

关于javascript - 确定场景中物体的相机可见 x,y,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45313181/

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