Unity一种判断点位置是否在摄像机视锥内的方法参考

一种判断点位置是否在摄像机视锥内的方法,看代码:

boolIsInCamera(Camera cam, Vector3 pos)
{
	Vector3 viewPos = cam.WorldToViewportPoint(pos);
	if (viewPos.z < 0) returnfalse;
	if (viewPos.z > cam.farClipPlane) returnfalse;
	if (viewPos.x < 0 || viewPos.y < 0 || viewPos.x > 1 || viewPos.y > 1) returnfalse;
	returntrue;
}

这里提一下Camera.WorldToViewportPoint和Camera.WorldToViewportPoint的异同吧,两者返回的都是一个Vector3,且其中的z值是相同的,且点位置当z>0时在摄像机前面,z<0在摄像机后面,这个z值可以直接当深度用了,哈哈。不过x和y的值不一样,对于前者来说,x和y是把屏幕坐标归一化的,对于后者来说,x和y是屏幕的具体像素位置值。就是说如果一个点在摄像机视锥内,那对于前者的返回值来说,x和y的值都必定在0-1的范围内,而对于后者来说,x的值在0-Screen.Width范围内,y的值在0-Screen.Height范围内。

猜你喜欢

转载自blog.csdn.net/ttod/article/details/129360583
今日推荐