• 欢迎来到GeekFaner

    每周更新一篇教程,轻松学习cocos2d-x

    联系我们
  • 又是一个美好的一天

    每天的太阳都是新的,今天要比昨天好

    联系我们
  • 出发!

    开始今天的课程学习,让我们的明天更美好

    联系我们

课程概述

“Cocos2d-X的纹理(1)”课程概述

游戏中的UI元素各种各样,栩栩如生,而这些UI元素的形状依靠的是顶点坐标,色彩大多都是依靠了纹理,纹理也是OpenGL ES中的重要概念。本节课将讲述Cocos2d-X的纹理。

教学视频

课程笔记

如何将纹理对应到屏幕上

在(Cocos2d-X的核心OpenGL ES)一节中,我们知道了如何将Cocos2d-X的一个UI元素,从本地坐标系,经过矩阵变换,转换到世界坐标系,再经过模型视图矩阵、投影矩阵,转换到裁剪坐标系,再经过视口变换,对应到屏幕上的一个个点(像素)。然而在世界坐标系中的每一个点,不仅对应着一个坐标变量,还对应着一个纹理坐标,指定该点对应纹理中的某个点。顶点坐标为(x、y、z、w),纹理坐标在纹理图片中为(u、v),u、v是纹理的宽度和高度,在fragment shader的纹理坐标为(s、t),为(u、v)的归一化坐标。在光栅化的时候,生成像素点的顶点坐标,并使用插值smooth(或者非插值flat)的方法生成每个像素点的纹理坐标(颜色、深度等),使得屏幕上的点可以于纹理图片中对应。

但是屏幕上的点是离散的,经过了光栅化,一条斜线就是由一些不在一条直线上的点组成,会出现锯齿,为了反锯齿,可以使用多重采样。多重采样,就是在图片的边缘部分,framebuffer上的每个点的颜色不仅是该像素点由fragment shader生成的颜色决定,而是利用了多重采样缓冲区,由该点附近多个位置的颜色、depth、stencil决定。Cocos2d-X默认没有打开多重采样,可以打开并设置multisample buffer的数量,原因是Cocos2d-X主要用于2D游戏的开发,大部分UI元素是规则而且垂直于摄像机。打开多重采样效果好,但是影响性能。

如何将CPU中的纹理图片传入GPU

纹理图片在CPU一般是压缩格式,比如png、jpg,需要解压成glTexImage2D认识的格式,Cocos2d-X提供这样的方法。然后,通过glTexImage2D函数,输入参数为format(纹理图片在CPU中的分量组成),type(纹理图片在CPU中的存储格式和分量组成方式),internalformat(纹理图片在GPU中的分量组成方式)。纹理图片经历了解包、归一划、转换为RGB格式、归一划的过程,存储到了GPU中,在内存中,需要按照UNPACK_ALIGNMENT对齐。当CPU的纹理图片unpack到了GPU,开发者可以把CPU端的纹理图片删除。

纹理属性

可以对纹理设置其属性,包括filter(用于纹理图片于显示区域并非11对应的时候,将纹理图片中的点对应到屏幕上的时候,确定如何采样。)wrap mode(用于在纹理坐标超出纹理尺寸的采样行为)。多级纹理是借用原始纹理生成很多隶属于该纹理的小纹理,借用这些纹理来完成采样。多级纹理可以在游戏中生成,也可以在纹理素材中包含。

纹理的存储格式影响着应用程序包的大小,也占据了游戏的大部分内存。

联系我们

笔者制作网站的目的,主要是借用自己之前的知识背景(Android App开发和图形学知识),将自己学习笔记拿出来,和大家一起进行交流,毕竟每个人的知识体系不同,有交流才会有提高,所以欢迎大家通过各种方式和我联系。
网址:www.geekfaner.com
"极客学院"教学视频(高清版_推荐):http://www.jikexueyuan.com/course/cocos/1-5-0

wangshuo@geekfaner.com