atlas z 轴
|
问题源自一个帖子,因为上传的图比较多,就另开了这个贴写下自己的试验结果,原帖在下面链接中 http://game.ceeger.com/forum/read.php?tid=8911#info NGUI中是用depth来控制sprite显示顺序的,本来这很好用,但碰到上面帖子中的问题时却不好解决了,于是我试验了下。以下是一些总结,不对的地方请指正。 下面的内容可能看起来比较绕,这样的话只需实际试验下就能很容易的知道结果,呵呵 如果还是看不明白,可以先看1楼,那里有个总结 1,同一个panel下,同一个atlas的不同sprite的显示只受depth的控制,这是最经常用的方式。此时不论精灵的z轴如何变化,depth高的一定在前面。 比如精灵A的z轴是-10,更靠近相机,但它的depth是0,而精灵B的z轴是0但depth是1,那么精灵B还是显示在前面 如下图,0、1、2的前缀分别是三者的depth值,则三者的排列就是如图的由下到上,2_Label在最上面 现在在depth不变的前提下修改z轴的值。将0_Dark的z轴调为-100,则它离相机更近了,看上去应该挡住后面的两个才对,但Game场景中三者的关系并没有改变,也就是说虽然看上去0_Dark应该挡住后面的东西,但并没有这样,还是depth起作用,也就是feiben同学所说的“相同atlas其实是共用同一个Z轴深度”。 2,不同panel下,同一个atlas的不同sprite不受depth的控制,而受z轴控制。此时只需稍微调节下其中一个精灵的z轴就可以,比如0.1,就可以控制sprite的显示 比如接着1中的图,新建一个panel_B,将1_NGUI拖到里面,会看到它盖住了0和2,现在调节depth不起作用,无论1_NGUI的depth调成多少,都不会改变它在最上面的状态 现在调节下1_NGUI的z轴为0.1,则它到了最后面 而比如现在想把在panel_B中的1_NGUI重新显示在0和2之间,能办到么?经过试验会发现无论怎么调三者的z轴,都不能将NGUI放到1和2之间,因为它们是一个图集中的精灵,共用一个z轴深度 比如将0_Dark的z设为100,此时1_NGUI的z轴还是0.1,但1_NGUI重新跑到了最上面,而不是中间 再把Label的z设为-100,NGUI是被覆盖了,但Dark也跟着跑到了上面,注意此时三者的空间位置,NGUI的确是在中间的,但还是被后面的Dark挡住了 你也许会感觉这是自找麻烦,没事把同一个atlas的精灵放到两个panel中干什么呢?一般情况下是自找麻烦,但为了解决上面帖子中提到的问题,这是个解决的办法,如3 3,不同panel下,不同atlas的精灵的穿插,受z轴的控制。 现在回到帖子中提出的问题,怎么让多个atlas的sprite能进行穿插。办法是用多个panel。 比如有两个atlas,分别为SiFi和Wooden,而SiFi中有两个要显示的精灵Dark和Label,Wooden中有一个要显示的精灵wooden,现在想把wooden放到Dark和Label之间。那么设置两个panel,一个放Dark和wooden,另一个放Label,或者一个放Label和wooden,另一个放Dark,只要SiFi图集中的两个精灵不在同一个panel中就可以,之后微调其中一个精灵的z轴就可以了,比如调节Label的z轴为-0.1,则如下图,wooden到了Dark和Label的中间 不过如果认为为什么要这么麻烦呢,只需要在一个panel中调节就可以了,那就回到了2中的问题上,总是在上或在下,而不会在中间 ,Dark为100,Lable为-100,且三者的depth也是相应的,但wooden还是在最上面 ,而Dark和Label的z不变,则wooden跑到了最后面,但就是不到中间去 此外,即使用两个panel,但同是SiFi图集中的Dark和Label还是在同一个panel下,而把wooden放到另一个panel中,还是无法达到插入的目的,如下图,无论怎么调节wooden的z轴,它要么在最前面,要么在最后面
当然这是最简单的穿插,如果有多个panel和多个atlas的话情况会比较复杂,此时要记着2中的情况,否则还是容易出现无法穿插的问题。而解决这个问题的方法最好还是atlas设计的时候更全面,让穿插的sprite在一个atlas中,这样只用depth深度就可以控制了 而之所以对panel是否会产生drawcall,是因为官方例7中只用了2个Atlas,但drawcall却是5个,当时简单的认为是panel的问题。 |
|
|
|
1楼#
发布于:2013-02-08 00:55
其实上面的东西总结出来就一句话:(啰嗦那么多,总结却这么少,好没成就感,呵呵) 在相同Panel下,相同Atlas中的Sprite才受Depth控制,其他情况则受z轴控制,但同时又受前者影响。 列个表的话就是: 1、相同panel 相同atlas sprite受depth控制 2、相同panel (同时受1的影响) 不过要特别注意的是,虽然depth控制的范围看似较少,但它却占主导地位,是最常被用到的,这是因为NGUI基于Atlas,只有在1无法达到目的的时候,才会去用其他的。 此外关于字体, 对于英文,因为就那些有限的字母(因为只会点英语,所以不知道是不是有的外语制作起来也很繁杂),所以可以和图片sprite放到一起,官方的atlas中就是这样的分布,把字体和图片打包在了一起。这种情况下我感觉字体和图片是在同一个atlas里面的,使用起来也只是占1个drawcall。而同一个atlas中的sprite,则可用depth来调整深度。比如上面1234例子里的Label就是英文字体,它是和Dark这个图片同在SiFi图集中,所以在相同panel下可用depth来控制显示顺序。但此时想再插入一个其他atlas中的sprite到他俩之间的话,就会不成功,因为他俩是一个atlas中的。 而不同的panel下就只能用z轴来控制了。比如用SiFi的Label,此外再用wooden图集的button,他俩只用depth是没法控制的。如下图中,后缀表示label的depth是10,而button的depth是0,但button还是挡住了label,这和上面说的第4条一样。
比如下图中,用了3个Atlas,都放到同一个panel下,后缀表示的depth,注意左边的那4个是参照,只为了能看清都是那些东西。分别是: Atlas1,使用一个sprite,人物为程咬金,depth为3 Atlas2,实际是一个中文Font字体的label,也看做是图集,depth是2 Atlas3,最后两个精灵都是用的Sift中的,depth是0和1 然后把它们都放到一个panel下,而你做试验的时候可能显示的顺序不一样,但不要紧,我们关注的是它们是不是以depth的顺序排列了,而看一下就知道,它们并没按顺序排列,比如NGUI的depth是1,但它却显示在了最上面。
|
atlas z 轴的更多相关文章
- (转)NGUI中深度depth和z轴关系
先列出转载链接: http://game.ceeger.com/forum/read.php?tid=8917 转载原文: 问题源自一个帖子,因为上传的图比较多,就另开了这个贴写下自己的试验结果,原帖 ...
- 传感器(3)传感器的X,Y,Z轴
设备正面水平向上. X轴 : 左右方向,向右是正值. Y轴 : 远近方向,远离你是负. Z轴 : 上下方向,向上是正值.
- transform:translateZ() 字体模糊问题 父类重返Z轴平面
translateZ()变糊 第一种情况: 当translateZ(m)中的 m设置为 非整数,1.5px 之类的,字体会模糊,但是不明显;和浏览器渲染,字体格式,或者操作系统有关, 这个 css中 ...
- 内联元素于与块元素的转换 相对定位、绝对定位以及fixed定位 Z轴覆盖
今天上午学习了内联元素于与块元素的转换 个人觉的display:none将元素非常好用,可以配合当鼠标放到这里会出现. 转换成行内元素display: inline; 转换成块元素displ ...
- [osg][原]osg的坐标系:使用右手法则Y轴向前、X向、右Z向上。camare的默认姿态:向下看(Z轴负向),头向前(Y轴正向)
参考:http://blog.csdn.net/tmljs1988/article/details/7561887 图中上半边为opengl坐标系,下半边的osg坐标系: osg::Camare的默认 ...
- SVG渲染顺序及z轴显示问题(zIndex)
SVG是严格按照定义元素的顺序来渲染的,这个与HTML靠z-index值来控制分层不一样. 在SVG中,写在前面的元素先被渲染,写在后面的元素后被渲染.后渲染的元素会覆盖前面的元素,虽然有时候受透明度 ...
- PhoneGap 加速计 api 获取加速计 x 轴 y 轴 z 轴信息
一.PhoneGap 加速计 Accelerometer 对象介绍 1.主要方法 accelerometer.getCurrentAcceleration 获取当前设备在 x,y,z 轴上的加速度信息 ...
- OpenGL编程(七)3D模型的深度(z轴)检测
下图是我们要修改后的效果图: 一.深度检测 1.模型Z轴显示有问题: 上一次试验中,如果认真留意,会发现一个问题.当控制锥体在左右或上下旋转时,你会发现锥体看起来是在+-180度之间来回摆动,而不是3 ...
- 如何让View一直沿z轴旋转
#import <QuartzCore/QuartzCore.h>... CABasicAnimation *rotationAni = [CABasicAnimation animati ...
随机推荐
- ASCII码图
图片转ASCII码图 效果图 基本思路 把图片每个像素点的信息拿出来,最重要的是拿到rgb的值 把每个像素点由rgb转成灰度图像,即0-255 给0-255分级,把每个等级的像素点转换成ascii ...
- 驯服你的Windows Server 2003
虽然通过一些技巧可以让Windows Server 2003更符合我们的使用习惯,但对我等菜鸟来说,操作还是有相当的难度,有没有更简单.更省事的驯服它的办法呢?有,那就是使用Windows Serve ...
- javascript学习笔记(window .alert 是什么)
<script language="javascript"> var abc="25"; window .alert(abc); </scri ...
- python数据库连接
现在装python基本都内置了sqlite连接,写成如下形式即可 from sqlite3 import dbapi2 as sqlite 如果需要insert或update东西,之后的cur必须co ...
- HDU 2815 Mod Tree
不会,先搁着…… http://blog.csdn.net/acm_cxlove/article/details/7832197
- JS动态增加页面上的控件实例
<input type="button" value="继续添加" onclick="append();"/ > & ...
- One Person Game(扩展欧几里德求最小步数)
One Person Game Time Limit: 2 Seconds Memory Limit: 65536 KB There is an interesting and simple ...
- DevExpress ASP.NET 使用经验谈(8)-ASPxGridView自定义列和基本事件
为演示本节示例,我们在原来Users表增加[性别Gender].[兴趣爱好Hobbies],[CreateTime创建时间],[ModifyTime]修改时间这4个字段, ALTER TABLE [d ...
- SQL 插入语句汇总
INSERT VALUES 插入一行或多行到目标表中 -- single row INSERT INTO Sales.MyOrders(custid, empid, orderdate, shipco ...
- C/C++ 笔试、面试题目大汇总(转)
这些东西有点烦,有点无聊.如果要去C++面试就看看吧.几年前网上搜索的.刚才看到,就整理一下,里面有些被我改了,感觉之前说的不对或不完善. 转自fangyukuan,地址http://www.cnbl ...

lvmeng...

