camera.convertToUINode 我实现了2D跟随3D模型,不过我3D视角摄像机转过180度后,就是背对着这个3D模型,文字又出现了,我应该如何过滤

camera.convertToUINode 我实现了2D跟随3D模型,不过我3D视角摄像机转过180度后,就是背对着这个3D模型,文字又出现了,我应该如何过滤。

转换代码如下:
private _pos: Vec3 = new Vec3();
const wpos = this.target.worldPosition;
const camera = this.camera!;
// [HACK]
// @ts-ignore
camera._camera.update();
camera.convertToUINode(wpos, this.node.parent!, this._pos);
this.node.setPosition(this._pos);
// @ts-ignore
Vec3.transformMat4(this._pos, this.target.worldPosition, camera._camera!.matView);
const ratio = 10 / Math.abs(this._pos.z);
const value = Math.floor(ratio * 100) / 100;
this.node.setScale(value, value, 1);

1赞

目前判断通过convertToUINode得到的out点判断,out.z<0J就不赋值了(out对应代码中的this._pos)
我试了试不算太准确,但是目前没有什么大问题。
有没有判断物体不在相机视口内的方法,这样我能放心点。

新的问题,通过convertToUINode实现3D人物上的名字(label),如果此时这个人物前有其他3D模型,这个名字(label)无法被前方的模型遮挡。

人物名字不都是显示在屏幕最前面的吗?没见过哪个游戏一个人物会挡住另一个人物名字的

不能吧,一个人在房子里,你在房子外看他,你能看到他的名字,那就知道对方位置了,这样对?射击游戏这就属于透视作弊了。

可以做一个判断,如果在房间里,就隐藏名字,或者是用射线检测,人物前面被其他东西遮挡就隐藏名字。

这个情况应该是不渲染,而不是渲染了被其他物体渲染遮挡

sphereFrustum,sphereFrustumAccurate,aabbFrustum,aabbFrustumAccurate,obbFrustum,obbFrustumAccurate 这几个方法都可以判断是不是在相机视野内,都在intersect模块里