[LayaAir 2.0]如何获取3D物体在屏幕上显示的宽高呢?


QQ截图20191108173607.jpg

 
如截图,想获取这个3D物体在屏幕上显示的像素尺寸.
 
刚开始检测小行星是否还在屏幕上,是用碰撞检测做的. 但是那样的效果并不好; 后来换成了用一个最大时间判断,效果也并不好;
于是想到了通过先获取3D物体在屏幕显示的位置坐标,加上它自身在屏幕上显示的尺寸,以此来判断是否还出现在屏幕上显示.
这里我试过了MeshSprite3D下有一个属性叫bounds,打印出来的貌似是一个比例值,也不知道怎么使用该值.
发帖提问,请各路大佬支援!
已邀请:

温度大我

赞同来自:

额    沉贴了/////////

xueLayaBox

赞同来自:

请问有什么解决方法了吗

落幕夜未央

赞同来自:

下面这个代码,假设box直接放在3d场景上。
private checkBoxInScreen(box: Laya.MeshSprite3D): boolean {
let m = box.transform.worldMatrix;
let v = this.camera.viewMatrix;
let p = this.camera.projectionMatrix;
let vp = new Matrix4x4();
Matrix4x4.multiply(p, v, vp);
let mvp = new Matrix4x4();
Matrix4x4.multiply(vp, m, mvp);

let out = new Vector4();
Vector3.transformV3ToV4(new Vector3(0, 0, 0), mvp, out);

console.log(out.elements);

if (out.x >= -out.w && out.x <= out.w && out.y >= -out.w && out.y <= out.w && out.z >= -out.w && out.z <= out.w) {
return true;
} else {
return false;
}
}

要回复问题请先

商务合作
商务合作