Posts

【C++ OpenGL ES 2.0编程笔记】5: mipmap

03 Jan 2016

作者是现在对相关知识理解还不是很深入,后续会不断完善。因此文中内容仅供参考,具体的知识点请以OpenGL的官方文档为准

前言

本文介绍了OpenGL ES 2.0 中常用的多级纹理贴图技术,mipmap, 给出了一个使用mipmap的3D场景示例。
在三维计算机图形的贴图渲染中有一个常用的技术被称为Mipmapping。为了加快渲染速度和减少图像锯齿,贴图被处理成由一系列被预先计算和优化过的图片组成的文件,这样的贴图被称为 MIP map 或者 mipmap。这个技术在三维游戏中被非常广泛的使用。“MIP”来自于拉丁语 multum in parvo 的首字母,意思是“放置很多东西的小空间”。Mipmap 需要占用一定的内存空间,同时也遵循小波压缩规则 (wavelet compression)
mipmap的常见使用场景是,在一个采用透视投影的三维场景中,我们看到的东西是近大远小的,对于同一种东西,比如地板,近处使用像素尺寸较大的纹理,远处的使用像素较小的纹理,这样就节省了渲染的工作量。通过使用OpenGL的glTexImage2D函数可以实现多级纹理的加载,它的第二个参数就是纹理的级别。

效果图

...

阅读全文 ...


【C++ OpenGL ES 2.0编程笔记】4: 纹理贴图-图片叠加效果实现

02 Jan 2016

作者是现在对相关知识理解还不是很深入,后续会不断完善。因此文中内容仅供参考,具体的知识点请以OpenGL的官方文档为准

前言

本文介绍了如何使用OpenGL ES 2.0 API实现纹理图片的叠加显示效果。 #开发环境及相关库
  • vs2013 / C++
  • libEGL.lib : windows上的OpenGL ES环境
  • libGLESv2.lib : OpenGL ES 2.0 API
  • d3dcompiler_47.dll : 使用DX来模拟OpenGL
  • FreeImage.lib/dll : 加载纹理数据
  • 代码架构: 仿cocos2d-x结构,启动点在ELAppdelegate.cpp.

效果图:

...

阅读全文 ...


【cocos2d-x 3.x 学习与应用总结】4: 理解CC_CALLBACK_0, CC_CALLBACK_1, CC_CALLBACK_2, CC_CALLBACK_3

01 Jan 2016

#前言 得益于C++11的新特性,cocos 3.x版本在很多地方的代码看起来都优美了许多。这其中就包括一些回调函数的写法,CC_CALLBACK_N系列宏的作用是对一个成员函数进行适配并返回一个回调函数。本文介绍一下我对CC_CALLBACK_N系列宏的理解。

使用CC_CALLBACK_N的例子

下面这段代码来自cocos官方示例中的ActionTest.cpp, 这是在创建一个CallFunc的回调。 使用CC_CALLBACK_0来代替其原来的创建回调的方式: 使用CC_CALLBACK_0来改写上面三个回调的创建: ...

阅读全文 ...


【cocos2d-x 3.x 学习与应用总结】3: CallFunc系列

30 Dec 2015

#前言 前段时间写STL系列的文章的感受是,技术这东西你说深就深,说浅也浅。拿一个STL算法来说,对它的描述可以简单到给出几个示例用法,把代码往上一贴,OK搞定。或者也可以写的深入一些,分析一下它的源代码实现,分析一下它的效率、边界条件检测、线程安全性等等方面,再加上组织语言,一两个小时都是不够的。虽说现在我年纪轻轻,但是空闲时间并不多,而技术的东西实在太多,所以要做到详略得当,把握住重点,不能所有的东西都写的面面俱到。对于有价值的技术点,因为时间有限,我可以先写一下它的基础含义,假设它的深度有七层,我先写到一、二层,以后有时间或者碰巧对它有新的领悟的时候,再来继续在这一点上写,重复这个过程直到完成七层。今天开始《C++ STL学习与应用总结》系列的文章更新频率会开始降低,近期开始重点写cocos的东西了。 ...

阅读全文 ...


【C++ STL应用与实现】19: 迭代器特性-iterator traits

29 Dec 2015

本系列文章的目录在这里:目录. 通过目录里可以对STL总体有个大概了解 #前言 本文介绍了STL中的迭代器相关的类型和特性,它们用来定义和区分不同的迭代器类型。如iterator tag作为迭代器的“标签”用来区分迭代器的类型;iterator traits定义了所有类型的迭代器都应该有的公共信息。那标准库为什么提供这些东西呢?答案是我们可以根据这些信息来编写泛型代码,在泛型代码里根据iterator traits来判定迭代器的类型以做相应处理、可以自己定义迭代器实现自定义的迭代器操作。

iterator tag

下面的代码描述了五中类型的迭代器的“标签”,其中有几种类型的继承关系, 这包含了面向对象的“IS A”的含义。例如,从forward_iterator_tagbidirectional_terator_tag的继承关系可知,它们分别对应的迭代器类型,Bidirectional Iterator “IS A” Forward Iterator. 意味着可以用Forward Iterator 的地方,丢一个Bidirectional Iterator过去也是可以的。 ...

阅读全文 ...