如题,判断某个物体(节点)进入到了屏幕中,想实现一个物体进入屏幕后才加载另一个物体,反之离开屏幕后释放该物体。不知道射线检查能否实现
摄像头也有大小,不能写判断包围盒的方式吗?
包围盒有是否进入摄像机范围的判断方式?
摄像头有包围盒吗?没有可以加吗?
直接世界坐标转屏幕坐标,在可视范围内就是进入了
能不能用引擎自带的函数实现啊?
好像没有找到,你问下官方
谢谢提供的思路,晚些试一下
2.X camera组件有containsNode方法,3.X不清楚
问题没说清楚,是2d还是3d?
如果是3d,用世界坐标转屏幕坐标,再用引擎自带的碰撞检测类或者自己写判断,一共也就5行代码左右
3D的环境
用这种方式判断看看?
IsInView(worldPos: Vec3) {
var cameraPos = this.mainCameraSelf.node.getWorldPosition();
const viewPos = this.mainCameraSelf.worldToScreen(worldPos);
Vec3.normalize(this.dir, worldPos.subtract(cameraPos));
const forward = this.mainCameraSelf.node.forward;
var dot = Vec3.dot(forward, this.dir);
const viewportRect = view.getViewportRect();
//判断物体是否在相机前面
if (dot > 0
// 判断物体是否在视窗内
&& (viewPos.x <= viewportRect.width) && (viewPos.x >= 0)
&& (viewPos.y <= viewportRect.height) && (viewPos.y >= 0))
return true;
else
return false;
}
1赞
你可能想要的是四叉树、八叉树。不过你要想和做得东西就多了。
如果是3d建议不要这么做,卡得很。我现在恨不得直接节点那些全部加载好。节点进入渲染操作特别耗时
感谢!可用
你这个方法不行我试过 有些情况转出来的坐标是错的
基本原理都是这样的,你说这个不行?我每次都是这么用的,也没出任何问题,请问你说说这个方法有哪些错误?
我之前用得时候物品在摄像机后面得时候转出来得坐标是错得 在前面得时候没有问题
