查看: 21998|回复: 4
打印 上一主题 下一主题

Unity3D类分析——Texture2D

[复制链接]

12

主题

2

听众

231

积分

设计实习生

Rank: 2

纳金币
208
精华
0

最佳新人

跳转到指定楼层
楼主
发表于 2013-3-19 23:07:56 |只看该作者 |倒序浏览
1. 帮助文档:
2. 继承关系     Texture2D 继承与Texture 而Texture继承与Object,这也是我为什么跳过Texture类,设计Texture类的目的是因为还有三个子类 叫做 Texture2D、Texture3D和 RenderTexture的类。这里先简单说一下RenderTexture这个类,这个类其实也是一个Texture,只是渲染到纹理的特效承载器。具体的使用方法:在每一个Camera的属性中,都有一个Target Texture。这个的意思是这此相机的渲染目标是什么,如果为空就是指的屏幕,但是它的目标也可以是一个 RenderTexture 新建一个 Render Texture这时候将你创建的 Render Texture 拖拽带Camera的那个属性上去就行了,这时候,相机所看到的任何东西 都将放到你所创建的Texture上去了。3. Texture2D的性质我们对这一类的类分析是,需要从另外一个角度知道,那就是他的内部结构,所以这就涉及到一个Texture 究竟是什么?所得通俗一点,Texture就是图片,他还有一些其他的称呼,比如纹理,材质等等,这些名称是在不同的场合或者说起到不同的作用的时候名称,(其实当时他已经不仅仅是一张图片了,而是程序取走了他的信息和数据的重新应用)。我们首先得知道,一张图片代表了什么,他携带了怎样的信息。一张图片其实就是一张携带着像素信息的文件:我们首先将图片放到二维坐标系里,这时候,我们就可以给每一个像素定位,并获取每一个像素或者设置每一个像素信息了。我们在应用的时候,也是在利用这些信息,比如我们将一张图片拖拽到了一个GameObject上的时候,出现这样的:这个过程,其实越过了几步,我来说明一下,当我们拖拽过去的时候,编辑器为我们首先创建了一个材质球,之后得到我们拖拽的那张图片,作为Base的参数这个时候,这个材质会获取这张图片的信息,比如每一个像素的颜色,并给材质设置好相同的颜色,如果你将材质给别人贴过去,那么那个GameObject就是这张图片的颜色了。对于Texture2D最重要的两个属性我们的知道: 第一个是纹理过滤模式:关于这个概念,百度一下一大把,这个是比较基础的图形学概念,这里简单说一下,当我们贴图时候,不是说128×128大小的图片就一定贴到那么大的物体上,如果大了或者小了怎么办呢?这时候,我们就需要用算法来计算了,比如图片小了,128×128个像素需要放256×256个物体上去,这个时候,我们需要扩大图片,那么怎么扩大呢?主要有两种方式:(百度百科)(1)Linear(线性过滤)——分为具有纹理放大、缩小筛选器的双线性插补过滤,和在mipmap(纹理映射)级别间使用的三线性mipmap插补筛选器。双线性筛选后的纹理使用所需像素周围2x2区域内的“纹理像素”(单个像素纹理元素)的加权平均值。三线性筛选中,光栅化程序使用两个最近的mipmap纹理像素对像素颜色执行线性插补。显然三线性纹理过滤品质在3D游戏中高于双线性。(2)Anisotropic(各项异性过滤)——此项技术能通过筛选与屏幕XY轴平面之间的角度差异所造成的纹理模糊失真,是MT Framework中支持的最强纹理过滤技术,按图形效果分为2倍到16倍筛选级别。第二个就是纹理的重复模式:效果如图:
       这个设置是从这里:

重复模式有两个:一个是重复的铺上,另一个是使用最边缘的像素作为其他的像素填充上。所以看看上面的效果可以理解。4. Texture2D的方法我们知道了图片的性质,就有相应的访问的方法,这里主要介绍主要的方法。设置像素,指定三个参数 坐标 x,y,和颜色。
获得像素的颜色,两个参数 x,y,这个像素的坐标。
如果设置了像素,调用这个函数,使其生效。这个函数是将当前的纹理信息转换成PNG格式。这里设计到了另外一个知识点,就是图片格式。我们平常见到的PNG jpg 等等格式的不同,从根本上说是内部编码的不同。比如PNG格式,可以参开这里unity3d 提供了PNG格式的转换,我们使用.Net 文件处理方法就可以得到这样的png图片了。整个Texutre的使用其实就跟我们制作一个图片再拿到Unity3D里面一样,只是一个用编辑的方式实现,一个用脚本控制。下面做几个代码案例试试:1. 完全Copy,获得一个,之后获取信息,重现创建一个============================================================================     public Texture2D same;    void Start() {        Texture2D texture = new Texture2D(same.width, same.height, TextureFormat.ARGB32, ***e );
        int y = 0;        while (y < texture.height)        {            int x = 0;            while (x < texture.width)            {                Color color = same.GetPixel(x, y);                texture.SetPixel(x, y, color);                ++x;            }            ++y;        }        texture.Apply();          renderer.material.mainTexture = texture;
    }============================================================================2. 将获取的图片转换为PNG格式,并将文件写入硬盘============================================================================ IEnumerator writeFile()    {        yield return new WaitForEndOfFrame();        path = Application.dataPath;        Texture2D tex = new Texture2D( Screen.width, Screen .height, TextureFormat.RGB24, false);        tex.ReadPixels( new Rect (0, 0, Screen.width, Screen.height), 0, 0);        tex.Apply();        byte[] bytes = tex.EncodeToPNG();        Destroy(tex);        Debug.Log(fileName);        string thisName = fileName + ".png" ;        Debug.Log(thisName);        if (Application .platform == RuntimePlatform.Android)        {            path = "/mnt/sdcard/" + thisName;        }        else        {            path =path+ "/"+ thisName;        }
        FileStream cache = new FileStream(path, FileMode.Create);        Debug.Log(path);        cache.Write(bytes, 0, bytes.Length);        cache.Close();    }============================================================================

分享到: QQ好友和群QQ好友和群 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
转播转播0 分享淘帖0 收藏收藏0 支持支持0 反对反对0
回复

使用道具 举报

2317

主题

54

听众

2万

积分

资深设计师

Rank: 7Rank: 7Rank: 7

纳金币
20645
精华
62

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

沙发
发表于 2013-3-19 23:59:07 |只看该作者
很不错的介绍与分享,顶一个先!!
回复

使用道具 举报

733

主题

5

听众

1万

积分

资深设计师

Rank: 7Rank: 7Rank: 7

纳金币
6520
精华
14

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

板凳
发表于 2013-3-20 02:45:34 |只看该作者
如果有加上案例的图片就更好了。。谢谢
回复

使用道具 举报

ku 智囊团   

89

主题

2

听众

5万

积分

首席设计师

Rank: 8Rank: 8

纳金币
25
精华
1

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

地板
发表于 2013-3-20 14:47:03 |只看该作者
从这个角度就去学u3d,这个文章的作者必然是剑指架构师,希望多出这类文章,thx
回复

使用道具 举报

0

主题

1

听众

28

积分

设计初学者

Rank: 1

纳金币
2
精华
0
5#
发表于 2016-6-8 12:07:44 |只看该作者
为什么我这里看不到图片呢,一直加载不出来
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

关闭

站长推荐上一条 /1 下一条

手机版|纳金网 ( 闽ICP备08008928号

GMT+8, 2024-4-20 17:20 , Processed in 0.102289 second(s), 37 queries .

Powered by Discuz!-创意设计 X2.5

© 2008-2019 Narkii Inc.

回顶部