什么是Texture2D

如上图,Texture2D是一张二维图片
是由一颗一颗像素组成的。
通常是由低到高,由左到右排列的。
如果想要通过代码操作像素,我们必须要知道像素的坐标位置,现在我们来验证下是否真的如此排列。
我们通过简短的代码,NEW一个图片,并且根据X,Y轴对应R,G通道,逐像素赋值。我们将得到一张红绿渐变图,如下。
根据图片的颜色渐变过程,我们可以确信,像素排列顺序是和我们预测的一样。

TextureFormat是什么

TextureFormat为贴图的类型,ARGB32位,代表有ARGB4个通道,每个通道的颜色有8位,对应的还有A8,RGB24等。任何图片从本质上就是这样的。
而常见的JPG,PNG等是操作系统采用的压缩/非压缩读取格式,ETC/DDS为图形接口读取的压缩格式。

赋值完后为什么要Apply

因为在贴图更改像素时并不是直接对显存进行更改,而是在另外一个内存空间中更改,这时候GPU还会实时读取旧的贴图位置。
当Apply后,CPU会告诉GPU你要换个地方读贴图了。

所有的图片的像素排列顺序都一样吗?

事实上OpenGL和DX在UV方向和取值上是不同的,在此我们应该感谢Unity3D为我们做的那些事,让一切变得简单。

制作一个简单的笔刷

最终效果

实现轮廓

我们对上面的代码稍作修改。
我们在第一个红线引入一张贴图,第二个红线,将像素乘以这张贴图对应位置的alpha通道。
在色阶上每个通道是8位,0-255,但在计算时为浮点数。0~1。
所以如果alpha为0,任何颜色乘以他,结果都为0。
通过以上代码,我们实现如下效果:
这张贴图是张Alpha通道为0和1的通道,1为有颜色,0自然就没有颜色。也可以通过0-1之间的值实现渐变。
同样的,因为只用到一个通道,我们可以将它压缩为一张Alpha8的单通道8位贴图,来节省空间。

实现纹理

我们再次对上述代码进行更改,同样引入一张贴图来做纹理。
这次我们进行颜色相乘,因为颜色为浮点值,所以他们乘后的结果不会大于1,也不会小于0。
而重载运算符,在*的过程中,帮我们把RGBA通道一一对应的运算。
这里我们用到了相乘,很多人在用图像软件时,会遇到,相乘,相加,相除,相减等词汇。
一开始会很纳闷,为什么要这样命名。现在我们知道了,他们是在像素之间的数学运算关系。
通过以上简短的代码,我们就实现了一个比较复杂且完整的功能。

[Texture]详解Texture2D相关推荐

  1. Cocos2d之Texture2D类详解之将文件加载成Texture2D对象

    一.声明 笔者以cocos2d框架cocos2d-x-3.3rc0版本的源码做分析.本文为笔者原创,允许转载和分享,只要注明文章出处即可. 二.简介 Texture2D类简介 Texture2D类允许 ...

  2. 什么是渲染目标(render target) 渲染到纹理(Render To Texture, RTT)详解

    渲染到纹理(Render To Texture, RTT)详解 RTT是现在很多特效里面都会用到的一项很基本的技术,实现起来很简单,也很重要.但是让人不解的是网上搜索了半天只找到很少的文章说这个事儿, ...

  3. [Unity2018.2]ShaderGraph更新详解

    洪流学堂,让你快人几步!本文首发于洪流学堂微信公众号. 洪流学堂公众号回复节点,获取ShaderGraph节点详解PDF文件(带目录). ShaderGraph 2018.2 更新详解 在2018.1 ...

  4. 图形 2.4 传统经验光照模型详解(PBR光照计算公式介绍)

    参考视频: 图形 2.4 传统经验光照模型详解 GAMES101-现代计算机图形学入门-闫令琪 P15 参考资料: PBR-learnopengl 彻底看懂PBR/BRDF方程-知乎 辐射强度.辐亮度 ...

  5. python机械臂仿真_VTK与Python实现机械臂三维模型可视化详解

    三维可视化系统的建立依赖于三维图形平台, 如 OpenGL.VTK.OGRE.OSG等, 传统的方法多采用OpenGL进行底层编程,即对其特有的函数进行定量操作, 需要开发人员熟悉相关函数, 从而造成 ...

  6. 《Unity 3D 游戏开发技术详解与典型案例》——1.3节第一个Unity 3D程序

    本节书摘来自异步社区<Unity 3D 游戏开发技术详解与典型案例>一书中的第1章,第1.3节第一个Unity 3D程序,作者 吴亚峰 , 于复兴,更多章节内容可以访问云栖社区" ...

  7. 转载 雨松mono Unity获取游戏对象详解(来自我的长微博)

    Unity获取游戏对象详解(来自我的长微博) 转载 自 雨松mono 本文固定链接: http://www.xuanyusong.com/archives/2768 转载请注明: 雨松MOMO 201 ...

  8. opengl 深度详解_一步步学OpenGL(23) -《阴影贴图1》

    教程 23 阴影贴图1 原文: http://ogldev.atspace.co.uk/www/tutorial23/tutorial23.html CSDN完整版专栏: https://blog.c ...

  9. Unreal3 window下内存管理实现详解

    Unreal3 window下内存管理实现详解 最近组里面同事加入了一个很牛叉的内存管理代码,勾起我对内存管理的强烈欲望,以前也做过内存管理,在没有遇到U3以前看了3,4种算法(C++游戏编程 这本书 ...

最新文章

  1. c # 学习笔记(一)
  2. jQuery中FormData的使用
  3. 前端学习记录 CSS
  4. 1205: 正序数(归并排序统计正序数)
  5. P5072-[Ynoi2015]盼君勿忘【莫队,根号分治】
  6. ProFTPD 初探
  7. 终于有人把数据中台讲明白了
  8. MySQL基础——DML语言学习\插入数据\删除数据\更新数据
  9. oracle linux 图形化,Linux7图形化安装Oracle11g教程,亲测实用有效!
  10. 计算机系统-理论-内存分页机制/线性地址/虚拟内存
  11. python将一行作为字段_Python 变量代入,指定某一行截取输出字段怎么办?
  12. django 类取消csrf_最新Django全套教程 半个月搞定Django
  13. javascript测试题和参考答案
  14. C1WebChart 图形化处理。
  15. CentOS7|Redhat7挂载NTFS格式磁盘
  16. [转自天涯]ISO27001与ISO20000的关系心得
  17. Markdown标题加粗居中写法
  18. 技术创新是场寂寞的长跑
  19. 【翻译】Style Transfer by Relaxed Optimal Transport and Self-Similarity
  20. 句法分析-基于CKY的PCFG(概率上下文无法语法)

热门文章

  1. 2.4 导集,闭集,闭包
  2. plsql 客户端字符集_plsql查看数据库字符集
  3. 回归预测 | MATLAB实现PCR(主成分回归)多输入单输出
  4. Mac系统卸载Paragon NTFS for mac
  5. html 点击选择变色,css实现选中后变色并且效果不消失
  6. python 打印机控制_python调用打印机
  7. win7共享xp打印机_快速有效的局域网共享方法,十年老技术现身说法亲测可用
  8. maven如何排除依赖
  9. matlab教师考试安排,中小学教师资格证考试2018年上半年(笔试)日程安排表
  10. 云存储空间选择十分重要,大小确是关键因素