openGL基本概念】的更多相关文章

1. 光照模型      环境光——经过多次反射而来的光称为环境光,无法确定其最初的方向,但当特定的光源关闭后,它们将消失. 全局环境光——每个光源都能对场景提供环境光.此外,还有一个环境光,它不来自任何特定的光源,称之为全局环境光.这也就是为什么我们不加任何自定义光源,也能看见绘制的物体的原因.散射光——来自同一方向,照射到物体表面后,将沿各个方向均匀反射,因此,无论从哪个方向观察,表面的亮度都相同. 主要通过设置GLfloat light_diffuse[] = { 0.0, 1.0, 0.…
顶点数据: 顶点数据是一系列顶点的集合. 一个顶点(Vertex)是一个3d坐标的数据的集合. 而顶点数据是用顶点属性(Vertex Attribute)表示的,它可以包含任何我们想用的数据. (但是简单起见,我们还是假定每个顶点只有一个3D位置和一些颜色值组成的.) 图元: 为了让openGL知道我们的坐标和颜色值构成的到底是什么,openGL需要你去指定这些数据所表示的渲染类型. 我们是希望把这些数据渲染成一系列的点?一系列的三角形?还是仅仅是一个长长的线?做出这些提示的叫做图元(Primi…
OpenGL自身是一个巨大的状态机(State Machine):一系列的变量描述OpenGL此刻应当如何运行.OpenGL的状态通常被称为OpenGL上下文(Context).我们通常使用如下途径去更改OpenGL状态:设置选项,操作缓冲.最后,我们使用当前OpenGL上下文来渲染. 假设当我们想告诉OpenGL去画线段而不是三角形的时候,我们通过改变一些上下文变量来改变OpenGL状态,从而告诉OpenGL如何去绘图.一旦我们改变了OpenGL的状态为绘制线段,下一个绘制命令就会画出线段而不…
着色器程序 着色器程序对象(Shader Program Object)是多个着色器合并之后并最终链接完成的版本. 如果要使用刚才编译的着色器我们必须把他们链接为一个着色器程序对象,然后在渲染对象的时候激活这个着色器程序. 已激活着色器程序的着色器将在我们发送渲染调用的时候被使用. 当链接着色器至一个程序的时候,它会把每个着色器的输出链接到下个着色器的输入. 创建程序对象: GLuint shaderProgram; shaderProgram = glCreateProgram(); glCr…
上一节说布景层CCLayer是小容器,那么精灵类CCSprite就是容器添加的内容,它是构成游戏的主要元素.精灵这个名称应该是游戏专用,它表示游戏中玩家操作的主角.敌人.NPC(Non Player Character-非玩家控制角色的缩写).背景.道具和机关等.在Cocos2D-x中,CCSprite本质上就是一张二维的图片对象而已.CCSprite的继承关系图如下:    从上图可知,CCSPrite也是CCNode的子类,不过它还支持纹理和色彩.看一看CCSprite的内部结构和功能.  …
OpenGL中图形绘制后,往往需要一系列的变换来达到用户的目的,而这种变换实现的原理是又通过矩阵进行操作的.opengl中的变换一般包括视图变换.模型变换.投影变换等,在每次变换后,opengl将会呈现一种新的状态(这也就是我们为什么会成其为状态机). 有时候在经过一些变换后我们想回到原来的状态,就像我们谈恋爱一样,换来换去还是感觉初恋好,怎么办?强大的opengl就帮我们提供了两个函数:giPushMatrix()和glPopMatrix(); 首先我们要知道,对于矩阵的操作都是对于矩阵栈的栈…
1 引子 虽然是计算机科班出身,但从小对几何方面的东西就不太感冒,空间想象能力也较差,所以从本科到研究生,基本没接触过<计算机图形学>.为什么说基本没学过呢?因为好奇(尤其是惊叹于三维游戏的逼真,如魔兽世界.极品飞车),在研究生阶段还专门选修计算机图形学,但也只是听了几堂课,知道了有帧缓存.齐次坐标等零零散散的概念,之后读了一篇论文并上台作报告(压根没读懂).总之,当时只是觉得计算机图形学或三维渲染很牛,甚至问我什么是渲染都不知道,更不知道如何将3维几何体显示到2维屏幕上.令我现在想来非常可笑…
一.简介 最近,马三买了两本有关于“计算机图形学”的书籍,准备在工作之余鼓捣鼓捣图形学和OpenGL编程,提升自己的价值(奔着学完能涨一波工资去的).俗话说得好,“工欲善其事,必先利其器”.想学习图形学和OpenGL编程必须先把开发环境搭建好,而马三只是在上学的时候稍稍做了一些基于Android平台的OpenGL开发学习,并没有搭建过OpenGL开发环境.因此在搭建过程中颇废了一番周折,也查阅了不少资料才算搭建成功,特此记录一下搭建过程,以备不时之需. 二.搭建环境 1.VS2017 这个不必多…
昨天学习了如何使用codeblocks来编译运行一个opengl的项目.在创建一个新的opengl项目时他默认已经写了一个示例,今天我们就上面的例子进行下代码的剖析,以此来敲开opengl的神秘大门. 先把代码贴上来(在此我为每个函数的作用都写上了详细的注释): /* * 该代码是由一位叫Nigel Stewart的写于2003年11月,例子的目的是测试以glut实现球体,圆椎,圆环的纺纱线框和平滑阴影的形状. * 数量的几何栈和切割可以使用热键“-”或“+”调整. */ #ifdef __AP…
精灵(Sprite)是游戏里面的角色,比如敌人,游戏里面运动的物体等等,所以精灵是游戏里面一个非常常见的概念,几乎无处不在.在Cocos2D-x里面精灵是用CCSprite类来进行表示的,它可以用一张图片或者一张图片的一块矩形部分来定义.我们可以通过下面的代码用一张图片资源创建一个精灵,然后把它添加到游戏中: CCSprite *b = CCSprite::create("cat.png"); b->setPosition(ccp(s.width * 0.5, s.height…