分析专题提供分析的最新资讯内容,帮你更好的了解分析。
首先把so动态库文件 编译出来(通过NDK),然后再 拷贝到android的工程里 libs/armeabi/下,如果libs/armeabi 不存在,那就自己创建,最后用eclipse编译项目,这样将自动把so文件打包到apk里;eclipse在打包的时候会根据文件名的命名规则(lib****.so)去打包so文件,开头和结尾必须分别为“lib”和“.so”,否则是不会打包到apk文件中的。 生
最近完整的学习了learnopengl(http://www.learnopengl.com/),觉得非常有启发,从而又想起了这个长草许久的专题,正好趁这段时间,从本篇起完成这个专题,需要说明的是,从本系列的第五篇起将使用cocos2d-x3.10版本对应的代码,最早的三篇采用的是相对比较老的代码,但是我重新阅读后发现对理解有没有什么影响,所以暂时我不会升级之前的代码,但是为了保持和最新代码的一致
       上一篇我们介绍了cocos2d-x绘制基本图形的基本流程,我们还留下了一个着色器的部分没有讲,本篇内容将从openGL的渲染流程讲起,介绍cocos2d-x中的着色器,openGL的渲染流程如图所示:                openGL的绘制通常就是将顶点数据传输到openGL服务端。我们可以将一个顶点视为一个需要统一处理的数据包,这个包中的数据可以是我们需要的任何数据,通常
       上一篇博客介绍了cocos2d-x中的着色器类相关的结构,以及着色器的一些原理,这一篇将介绍着色器语言。        GLSL(openGL shading langueage)openGL着色器语言可视为一种类C语言并包含某些扩展操作以及限制条件,从纯语言观点来看,GLSL语言包含了早期程序设计语言中的某些特征,例如,某些特殊变量可访问通过openGL应用程序设置的数据并置于板载
       纹理(Texture)就是图片,它用来给物体增加细节,cocos2d-x中使用Texture2D类处理2D纹理贴图,本篇就从cocos2d-x中的Texture2D类介绍openGL纹理。        首先介绍纹理坐标的概念,2D纹理是一个图像数据的二维数组。用2D纹理渲染时,纹理坐标用作纹理图像中的索引。一般来说,在3D内容创作程序中将制作一个网格,每个顶点都有一个纹理坐标。2D
       本篇会介绍openGL中的变换和坐标系统,由于篇幅的问题,本篇文章不会把重点的笔墨放在数学基础,如果对数学概念有疑问的读者可以翻一下大学的线性代数教材。        首先是向量的概念,向量是既有大小又有方向的量,他可以用带箭头的线段形象的表示,在openGL中,向量在计算光照上有非常大的作用,这点后面的文章会详细介绍。需要注意的是,在openGL中我们提到的向量常常是标准化向量,那
       上一篇介绍了openGL的变换和坐标系,本篇就介绍游戏引擎中一个重要的概念-MVP矩阵,首先涉及到透视投影和正交投影的概念,关于这个概念请参考之前的文章(文章地址:http://blog.csdn.net/bill_man/article/details/48199593),其中介绍了透视投影和正交投影的概念。        上一篇文章介绍了MVP矩阵的概念,但是并没有在代码上涉及。
       本篇文章介绍一个在游戏中的重要概念,在MVP矩阵中,视图矩阵和投影矩阵都和摄像机有关,说句白话,摄像机其实就是生成投影矩阵和视图矩阵的方式和原因,cocos2d-x中使用GamePlay3D类的Mat4类生成各种矩阵,一下就通过分析摄像机Camera类的代码来看这些矩阵是如何生成的。        首先来看正交矩阵的初始化代码: bool Camera::initOrthograph
      本篇介绍3d游戏中的天空盒概念,天空盒就是游戏中的背景,它是一个包裹整个场景的立方体,它由六个图像构成一个环绕的环境,给玩家一种所在场景比实际上大得多的感觉,如下图所示。        创建天空盒的方法和创建其他节点一样调用create函数,那我们看看create函数里到底做了什么? bool Skybox::init(const std::string& positive_x, co
     像素着色器调用完成后。模板测试就开始了,它可以丢弃片元,模板缓冲在渲染时获得有意思的效果。      模板缓冲中一个模板值有8位大小,每个窗口都会创建一个默认的模板缓冲,它可以通过数据控制屏幕显示,从而形成了显示裁剪的效果,如图所示。 glEnable(GL_STENCIL_TEST);       首先需要调用上面函数开启模板测试,然后进行模板测试的操作        我们曾经介绍过c
     深度测试类似于颜色缓冲(颜色缓冲存储片元颜色),深度缓冲是由窗口系统自动创建的,它储存着16、24或32位的浮点数的深度值。在大多数系统中,是24位的。      当深度测试开启时,openGL会用每个片元的深度值和深度缓冲的值对比,执行一次深度测试,如果测试通过,深度缓冲就会用深度值更新,如果深度测试失败,则片元就被抛弃。深度测试是在像素着色器运行后,模板测试完成后,在屏幕空间中完成的
       cocos2d-x中提供一个叫RenderTexture的类,它可以保存屏幕到一张图片,也可以在begin到end之间实现自己的绘制,俨然就是一个独立于屏幕的画布(关于RenderTexture的介绍文章地址:http://blog.csdn.net/bill_man/article/details/7250911),这个类其实使用了openGL的帧缓冲技术,在调用任何openGL命
       cocos引擎目前已经支持3d功能,之前在3d教程中介绍了cocos2d-x的3d功能中的光照,但是只是粗略的介绍了四种光源,因为光照的重要性和复杂性,这个系列文章会分两篇介绍光照,本篇介绍光照的基础-ADS模型,下一篇详细介绍几种光源。        ADS模型是光照的基本模型,包括Ambient(环境光),Diffuse(漫反射)和Specular(点光源)三种光照在物体上的效果
      cocos引擎支持四种发光体:环境光,方向光,点光源和聚光灯,上一篇已经介绍了基本光照模型,其中也介绍了环境光的算法,下面就介绍另外三种光源。        当一个光源很远的时候,来自光源的每条光线接近于平行,这看起来像是来自于同一个方向,比如太阳由于离我们无限远,所以太阳光被定义为平行光,因为所有的光线都是平行的,对场景中每个物体的光都保持一致,光照计算会和场景中的其他物体相似。  
       cocos2d-x中的batchNode的方式可以提高相同的纹理的渲染效率,但是它使用的绘制方式还是glDrawElements的方式,它只是把相同的纹理的绘制命令只提交一次,剩下的重复绘制都调用glDrawElements即可,当绘制中的一些参数变化时,使用glMapBuffer获得数据的指针,然后修改数据,代码如下: glBufferData(GL_ARRAY_BUFFER, s
       从数学上表示旋转,可以有三种表示方法:矩阵法,欧拉角法和四元数法,我们之前已经介绍了矩阵法,它有个问题,就是容易造成万向节死锁,所谓万向节死锁,就是当绕一个轴旋转到90度的时候,再绕另外两个轴旋转的结果都是一样的,也就是说少了一个自由度,另外矩阵法其中有无用的数据,造成内存的浪费。        欧拉角法是由欧拉在十八世纪提出,它由三个角表示:俯仰角,yaw偏航角,roll滚转角。
       openGL在cocos2d-x中的应用点,调用的api基本已经介绍的差不多了,这一篇介绍一些3d游戏中的概念,它们也和底层有一些关系,也是游戏中常用的一些封装。        当我们要在屏幕上绘制简单的图形时,我们直接计算点的坐标就可以,但是游戏世界中经常有些复杂的模型,例如房子汽车等,这些模型一般是用建模工具制作出来,并且导出数据到指定文件中,然后我们游戏中在读取文件把模型渲染出
//一直想找时间梳理下,虽然我可能讲的不好,但多写多讲才会进步啊!嗯,厚脸皮的试试。 /**************************************************************************** Copyright (c) 2013-2014 Chukong Technologies Inc. http://www.cocos2d-x.org Pe
原始文章地址:http://www.voidcn.com/article/p-zqlfzpgw-bbv.html // 通过plist载入缓存 CCSpriteFrameCache::sharedSpriteFrameCache()->addSpriteFramesWithFile("test.plist"); // 通过缓存载入sprite CCSprite* sp = CCSprite::cr
CCGLProgram 就是对OpenGL的shader program封装 初始化 有两种初始化方式,通过文件内容和文件名,以顶点shader为例 - initWithVetextShaderByteArray - initWithVetextShaderFileName 通过两个shader文件来初始化program 主要分为两个步骤: 编译(ciompile) 绑定(attach) desc