加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

Unity摄像机Viewport使用(三)

(2012-04-15 22:48:31)
标签:

it

分类: Unity33D
关于如何绘制viewport在maincamera上
在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)
   camera.Render();

详细代码 往后再完整写出来.

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有