
从cocos2D-X学习OpenGL专栏
文章平均质量分 85
从cocos2D-X源代码学习OpenGL
bill_man
从事手机游戏开发,喜欢钻研技术,努力成为优秀的程序员
展开
-
cocos2D-X源码分析之从cocos2D-X学习OpenGL(20)----模型,网格和材质
openGL在cocos2d-x中的应用点,调用的api基本已经介绍的差不多了,这一篇介绍一些3d游戏中的概念,它们也和底层有一些关系,也是游戏中常用的一些封装。 当我们要在屏幕上绘制简单的图形时,我们直接计算点的坐标就可以,但是游戏世界中经常有些复杂的模型,例如房子汽车等,这些模型一般是用建模工具制作出来,并且导出数据到指定文件中,然后我们游戏中在读取文件把模型渲染出来,一般比较有名原创 2016-06-15 16:58:05 · 9022 阅读 · 2 评论 -
cocos2D-X源码分析之从cocos2D-X学习OpenGL(19)----旋转表示法
从数学上表示旋转,可以有三种表示方法:矩阵法,欧拉角法和四元数法,我们之前已经介绍了矩阵法,它有个问题,就是容易造成万向节死锁,所谓万向节死锁,就是当绕一个轴旋转到90度的时候,再绕另外两个轴旋转的结果都是一样的,也就是说少了一个自由度,另外矩阵法其中有无用的数据,造成内存的浪费。 欧拉角法是由欧拉在十八世纪提出,它由三个角表示:俯仰角,yaw偏航角,roll滚转角。struct Eu原创 2016-06-15 15:11:28 · 5945 阅读 · 0 评论 -
cocos2D-X源码分析之从cocos2D-X学习OpenGL(18)----实例化
cocos2d-x中的batchNode的方式可以提高相同的纹理的渲染效率,但是它使用的绘制方式还是glDrawElements的方式,它只是把相同的纹理的绘制命令只提交一次,剩下的重复绘制都调用glDrawElements即可,当绘制中的一些参数变化时,使用glMapBuffer获得数据的指针,然后修改数据,代码如下:glBufferData(GL_ARRAY_BUFFER, sizeof(_q原创 2016-06-15 14:02:36 · 6298 阅读 · 0 评论 -
cocos2D-X源码分析之从cocos2D-X学习OpenGL(17)----发光体
cocos引擎支持四种发光体:环境光,方向光,点光源和聚光灯,上一篇已经介绍了基本光照模型,其中也介绍了环境光的算法,下面就介绍另外三种光源。 当一个光源很远的时候,来自光源的每条光线接近于平行,这看起来像是来自于同一个方向,比如太阳由于离我们无限远,所以太阳光被定义为平行光,因为所有的光线都是平行的,对场景中每个物体的光都保持一致,光照计算会和场景中的其他物体相似。 点光原创 2016-06-14 18:57:46 · 4164 阅读 · 0 评论 -
cocos2D-X源码分析之从cocos2D-X学习OpenGL(16)----基本光照
cocos引擎目前已经支持3d功能,之前在3d教程中介绍了cocos2d-x的3d功能中的光照,但是只是粗略的介绍了四种光源,因为光照的重要性和复杂性,这个系列文章会分两篇介绍光照,本篇介绍光照的基础-ADS模型,下一篇详细介绍几种光源。 ADS模型是光照的基本模型,包括Ambient(环境光),Diffuse(漫反射)和Specular(点光源)三种光照在物体上的效果是这样的:原创 2016-06-14 11:28:01 · 5863 阅读 · 1 评论 -
cocos2D-X源码分析之从cocos2D-X学习OpenGL(15)----帧缓冲
cocos2d-x中提供一个叫RenderTexture的类,它可以保存屏幕到一张图片,也可以在begin到end之间实现自己的绘制,俨然就是一个独立于屏幕的画布(关于RenderTexture的介绍文章地址:http://blog.youkuaiyun.com/bill_man/article/details/7250911),这个类其实使用了openGL的帧缓冲技术,在调用任何openGL命令之前,首先需原创 2016-06-13 11:37:12 · 6958 阅读 · 0 评论 -
cocos2D-X源码分析之从cocos2D-X学习OpenGL(14)----深度测试
深度测试类似于颜色缓冲(颜色缓冲存储片元颜色),深度缓冲是由窗口系统自动创建的,它储存着16、24或32位的浮点数的深度值。在大多数系统中,是24位的。 当深度测试开启时,openGL会用每个片元的深度值和深度缓冲的值对比,执行一次深度测试,如果测试通过,深度缓冲就会用深度值更新,如果深度测试失败,则片元就被抛弃。深度测试是在像素着色器运行后,模板测试完成后,在屏幕空间中完成的。屏幕空间坐原创 2016-06-13 10:29:12 · 6135 阅读 · 1 评论 -
cocos2D-X源码分析之从cocos2D-X学习OpenGL(13)----模板测试
像素着色器调用完成后。模板测试就开始了,它可以丢弃片元,模板缓冲在渲染时获得有意思的效果。 模板缓冲中一个模板值有8位大小,每个窗口都会创建一个默认的模板缓冲,它可以通过数据控制屏幕显示,从而形成了显示裁剪的效果,如图所示。原创 2016-06-12 10:54:03 · 5414 阅读 · 0 评论 -
cocos2D-X源码分析之从cocos2D-X学习OpenGL(12)----立方体贴图和天空盒
本篇介绍3d游戏中的天空盒概念,天空盒就是游戏中的背景,它是一个包裹整个场景的立方体,它由六个图像构成一个环绕的环境,给玩家一种所在场景比实际上大得多的感觉,如下图所示。 创建天空盒的方法和创建其他节点一样调用create函数,那我们看看create函数里到底做了什么?bool Skybox::init(const std::string& positive_x, const std:原创 2016-06-11 16:51:29 · 9404 阅读 · 0 评论 -
cocos2D-X源码分析之从cocos2D-X学习OpenGL(11)----摄像机
本篇文章介绍一个在游戏中的重要概念,在MVP矩阵中,视图矩阵和投影矩阵都和摄像机有关,说句白话,摄像机其实就是生成投影矩阵和视图矩阵的方式和原因,cocos2d-x中使用GamePlay3D类的Mat4类生成各种矩阵,一下就通过分析摄像机Camera类的代码来看这些矩阵是如何生成的。 首先来看正交矩阵的初始化代码:bool Camera::initOrthographic(float原创 2016-06-11 11:30:19 · 6641 阅读 · 3 评论 -
cocos2D-X源码分析之从cocos2D-X学习OpenGL(10)----MVP矩阵
上一篇介绍了openGL的变换和坐标系,本篇就介绍游戏引擎中一个重要的概念-MVP矩阵,首先涉及到透视投影和正交投影的概念,关于这个概念请参考之前的文章(文章地址:http://blog.youkuaiyun.com/bill_man/article/details/48199593),其中介绍了透视投影和正交投影的概念。 上一篇文章介绍了MVP矩阵的概念,但是并没有在代码上涉及。原创 2016-06-10 12:35:39 · 10533 阅读 · 0 评论 -
cocos2D-X源码分析之从cocos2D-X学习OpenGL(9)----变换和坐标系统
本篇会介绍openGL中的变换和坐标系统,由于篇幅的问题,本篇文章不会把重点的笔墨放在数学基础,如果对数学概念有疑问的读者可以翻一下大学的线性代数教材。 首先是向量的概念,向量是既有大小又有方向的量,他可以用带箭头的线段形象的表示,在openGL中,向量在计算光照上有非常大的作用,这点后面的文章会详细介绍。需要注意的是,在openGL中我们提到的向量常常是标准化向量,那什么是标准化向量原创 2016-06-09 11:03:42 · 7940 阅读 · 0 评论 -
cocos2D-X源码分析之从cocos2D-X学习OpenGL(8)----纹理
纹理(Texture)就是图片,它用来给物体增加细节,cocos2d-x中使用Texture2D类处理2D纹理贴图,本篇就从cocos2d-x中的Texture2D类介绍openGL纹理。 首先介绍纹理坐标的概念,2D纹理是一个图像数据的二维数组。用2D纹理渲染时,纹理坐标用作纹理图像中的索引。一般来说,在3D内容创作程序中将制作一个网格,每个顶点都有一个纹理坐标。2D纹理的纹理坐标是原创 2016-06-08 12:09:30 · 9376 阅读 · 3 评论 -
cocos2D-X源码分析之从cocos2D-X学习OpenGL(7)----GLSL
上一篇博客介绍了cocos2d-x中的着色器类相关的结构,以及着色器的一些原理,这一篇将介绍着色器语言。原创 2016-06-07 11:54:04 · 9901 阅读 · 0 评论 -
cocos2D-X源码分析之从cocos2D-X学习OpenGL(6)---cocos内置着色器
上一篇我们介绍了cocos2d-x绘制基本图形的基本流程,我们还留下了一个着色器的部分没有讲,本篇内容将从openGL的渲染流程讲起,介绍cocos2d-x中的着色器,openGL的渲染流程如图所示: openGL的绘制通常就是将顶点数据传输到openGL服务端。我们可以将一个顶点视为一个需要统一处理的数据包,这个包中的数据可以是我们需要的任何数据,通常其中几乎始终会包含原创 2016-06-02 18:22:37 · 9028 阅读 · 0 评论 -
cocos2D-X源码分析之从cocos2D-X学习OpenGL(5)---绘制基本图形
最近完整的学习了learnopengl(http://www.learnopengl.com/),觉得非常有启发,从而又想起了这个长草许久的专题,正好趁这段时间,从本篇起完成这个专题,需要说明的是,从本系列的第五篇起将使用cocos2d-x3.10版本对应的代码,最早的三篇采用的是相对比较老的代码,但是我重新阅读后发现对理解有没有什么影响,所以暂时我不会升级之前的代码,但是为了保持和最新代码的一致原创 2016-06-01 14:35:59 · 4816 阅读 · 3 评论 -
cocos2D-X源码分析之从cocos2D-X学习OpenGL(4)---混合
之前在项目中就使用过混合,但是研究的不深入,近期美术的一个需求让我下决心重新深入的研究了一下混合以及它在cocos2d-x中的使用,在这里分享给大家。原创 2015-12-30 20:12:30 · 5366 阅读 · 1 评论 -
cocos2D-X源码分析之从cocos2D-X学习OpenGL(3)----BATCH_COMMAND
个人原创,欢迎转载,转载请注明原文地址http://blog.youkuaiyun.com/bill_man上一篇介绍了QUAD_COMMAND渲染命令,顺带介绍了VAO和VBO,这一篇介绍批处理渲染命令BatchCommand,批处理命令的处理在Render中比较简单else if(commandType == RenderCommand::Type:: BATCH_COMMAND){ //将之原创 2014-08-15 20:52:05 · 6315 阅读 · 7 评论 -
cocos2D-X源码分析之从cocos2D-X学习OpenGL(1)----cocos2D-X渲染结构
cocos2D-X 3.0渲染结构代码讲解,也是cocos2D-X源码讲解系列文章和从cocos2D-X学习OpenGL系列文章的开始原创 2014-06-29 22:17:48 · 17961 阅读 · 8 评论 -
cocos2D-X源码分析之从cocos2D-X学习OpenGL(2)----QUAD_COMMAND
个人原创,欢迎转载,转载请注明原文地址http://blog.youkuaiyun.com/bill_man 上一篇文章介绍了cocos2d-x的基本渲染结构,这篇顺着之前的渲染结构介绍渲染命令QUAD_COMMAND命令的部分,通过这部分的函数,学习opengl处理图片渲染的方法,首先介绍这节需要涉及到的基本概念VAO和VBO。VAO和VBO: 顶点数组对象(Vertex Array O原创 2014-07-31 11:18:23 · 10639 阅读 · 7 评论