Unity摄像机Viewport使用(三)
(2012-04-15 22:48:31)
标签:
it |
分类: Unity33D |
关于如何绘制viewport在maincamera上
camera.Render();
在Unity里 分别有RenderTexture、Viewport和UI挖空三种方式能把3D模型画在主镜头前
此文只是给还是使用Unity的GUI的用户观看
首先RenderTexture这个一般不会有啥问题吧
创建流程一般是
Create a RenderTexture(看应用平台设置是否需要2的N次幂)
RenderTexture rt = new RenderTexture(width, height,
depth);
如果需要设置2的N次幂
rt.isPowerOfTwo = true; 否则不需要写出来
然后就是创建一个摄像机
Camera cam = new Camera();
然后设置camera的各种属性
一般需要设置clearFlags = CameraClearFlag.Depth;
还有把camera设置为正交变换 orthgraphic = true;
重要的一个是横纵比aspect = 1;
等等
然后把rt赋到cam.targetTexture下即可
这种方式渲染出来的图像不会跟着窗口大小改变而进行拉伸,而是用Viewport的话则会根据窗口大小进行拉伸渲染区域,效果看看QQ飞车手动拉伸屏幕时人物模型的变化
首先 我们要确定GUI所画的图是基于MainCamera的最前方,不可能存在后方物件覆盖到GUI之上
所以一般使用不使用RenderTexture而想场景物件能渲染在UI前的话 要么靠Viewport要么靠把UI挖空
比如一张800*600的背景图为了显示一个模型在100,100, 200,200的位置
而不得不把此处的背景挖空再用背景mesh填补.
这样做显然不科学,而RenderTexture是用使用限制的 比如某些Android机子跑不起
IOS上存在使用上限等等.而是用Viewport则不存在以上顾虑.
首先我们创建好一个camera设置好各种参数后把camera对准想要渲染在UI上的物体.
之前设置分屏我们采用的是camera的rect,如果使用camera.rect最终渲染出来的图像还是会被GUI渲染的挡着,所以我们需要使用camera.pixelRect,这个像素矩形能让camera所看见的图像进入GUI的渲染流程里.
pixelRect的设置和rect的设置不一样
rect的设置无非是通过自己计算坐标位于屏幕的百分比位置0,0, 300/Screen.width,
300/Screen.height
而pixelRect则是屏幕上所渲染的实际位置 比如0,0, 300,300
最后我们需要把创建的camera的enabled属性设为false,因为后续流程里
我们需要手动执行camera的Render() 所以不需要它自动执行.
大概就是在OnGUI里
if(EventType.Repaint == Event.current.type)
详细代码 往后再完整写出来.

加载中…