OpenGL基础概念

基本概念

透视(Perspective)
变换(Transformation)
投影矩阵(Projection Matrix):用于将3D坐标转换为2D屏幕坐标
光栅化(Rasterization): 实际绘制或填充每个顶点之间的像素形成线段
着色器(Shader) 是在图形硬件上执行的单独程序,用来处理顶点和执行光栅化任务
纹理贴图(Texture Mapping)
混合(Blending): 将不同的颜色混在一起
可编程着色器(Programmable Shader)
位平面(bitplane):指一块内存区域,保存了屏幕上每个像素的位信息

计算机图形:变换着色纹理混合

绘图坐标和窗口坐标

视口(viewport): 把绘图坐标映射到窗口坐标
图元(Primitives): 一维或二维的实体或表面(点,直线,多边形)
顶点(Vertex): 空间中的一个位置
视景体(View Volume):视景体外的内容不会被绘制

投影:

正投影(Orthographic Projection):又名平行投影,此时可以指定的视景体是长方体
透视投影(Perspective Projection):此时指定的视景体是平截头体(Frustum)

GLSL

GLSL(OpenGL Shading Language)即OpenGL着色语言
这是一种非常类似于C的程序设计语言。但是,GLSL不会对应用程序流程和逻辑进行控制,而是用于渲染操作。

OpenGL扩展机制:

opengl支持不同硬件厂商扩展API或者枚举
可以动态查询使用的OpenGL支持的扩展,使用GLEW库更简单
代码:

GLint ext_count;
glGetIntegerv(GL_NUM_EXTENSIONS, &ext_count);

// 获得扩展api的字符串名称
glGetStringi(GL_EXTENSIONS, i)

数据类型:

错误处理:

GLeunm glGetError(void);

每次只返回一个值,返回后,保存的错误代码被清除
通常:我们要在循环中调用glGetError()函数,直到返回GL_NO_ERROE为止

获得硬件信息:

可以使用下面函数获得硬件厂商的信息

glGetString(GLenum name)

图形质量还是速度:

void glHint(Glenum target, GLenum mode)

target: 指定要进行修改的行为类型(抗锯齿,纹理压缩质量…),
mode: 指定质量还是速度优先
注意:这是唯一一个行为完全依赖厂商的函数,OpenGL并没有要求函数调用保持一致

OpenGL状态机:

变量的集合成为管线的状态。状态机是一个抽象的模型,表示一组状态变量的集合

设置状态变量

void glEnable(GLenum cap)
void glDisable(GLenum cap)
...

获取状态变量

GLboolean glIsEnabled(GLenum cap);
void glGetBooleanv(GLenum pname, GLboolean *params);
void glGetDoublev(GLenum  pname, GLdouble  *params);
void glGetFloatv(GLenum   pname, GLfloat   *params);
void glGetIntegerv(GLenum pname, GLint     *params);

缓冲区:

颜色缓冲区(Color Buffer)
深度缓冲区(Depth Buffer)
模板缓冲区(Stencil buffer)
帧缓冲区(FrameBuffer): 指所有缓冲区一起串联工作,保存了图形硬件为控制屏幕上所有像素颜色和强度需要的全部信息

时间: 2024-08-04 17:38:51

OpenGL基础概念的相关文章

opengl基础学习专题 (二) 点直线和多边形

题外话 随着学习的增长,越来越觉得自己很水.关于上一篇博文中推荐用一个 学习opengl的 基于VS2015的 simplec框架.存在 一些问题. 1.这个框架基于VS 的Debug 模式下,没有考虑Release版本 2.这个版本中chead,c基础头文件中有些宏设计的不好,例如 //4.0 控制台打印错误信息 #ifndef CERR #define CERR(fmt,...) fprintf(stderr,fmt,##__VA_ARGS__),putchar('\n') #endif/*

OpenGL基础图形编程

一.OpenGL与3D图形世界1.1.OpenGL使人们进入三维图形世界 我们生活在一个充满三维物体的三维世界中,为了使计算机能精确地再现这些物体,我们必须能在三维空间描绘这些物体.我们又生活在一个充满信息的世界中,能否尽快地理解并运用这些信息将直接影响事业的成败,所以我们需要用一种最直接的形式来表示这些信息. 最近几年计算机图形学的发展使得三维表现技术得以形成,这些三维表现技术使我们能够再现三维世界中的物体,能够用三维形体来表示复杂的信息,这种技术就是可视化(Visualization)技术.

cocos2d-x-3.6 引擎基础概念

先讲一下引擎里面几个重要的基础概念:导演,节点,场景,层,精灵.当然实际开发者会碰到很多其他概念,不过不要紧,有了这些基础概念,后面自己学习起来就容易多了. 节点(Node)是cocos2d-x里面最基础的一个类,游戏中几乎所有的类都派生自这个类,换句话说,游戏里面几乎所有的游戏对象都是一个节点.那么如何管理这些游戏对象呢,cocos2d-x引擎采用节点树来管理所有的游戏对象.看看一个游戏里面各元素的关系图.这个不是类图,可以看成是组织关系图. 一个游戏由很多个游戏场景组成,就像一个电影,每段故

并行计算之基础概念(转)

原文地址:http://www.cnblogs.com/kuliuheng/p/4058858.html 并行计算(Parallel Computing)是指同时使用多种计算资源解决计算问题的过程,是提高计算机系统计算速度和处理能力的一种有效手段.它的基本思想是用多个处理器来协同求解同一问题,即将被求解的问题分解成若干个部分,各部分均由一个独立的处理机来并行计算.并行计算系统既可以是专门设计的.含有多个处理器的超级计算机,也可以是以某种方式互连的若干台的独立计算机构成的集群.通过并行计算集群完成

【Cocos2d入门教程二】Cocos2d-x基础概念

上一章已经学习了环境的搭建.这一章对基础概念进行掌握.内容大概有: 1.导演 2.场景 3.节点 4.层 4.精灵 1.导演(Director) 导演存在的主要作用: 环境设定(帧率 初始化openGl和渲染器) 场景管理 执行主循环 游戏就是个死循环 不断不断的渲染  就跟视频没两样 一帧一帧的绘制出来  话说提一下一帧为1/60秒  也就是说coco里一秒渲染60次 导演的管理:   计时器  事件管理器  动作管理器 导演继承于REF  一个单例类 获得导演类Director实例语句 au

关系型数据库常用基础概念知识归纳

声明:我的文章都是只挑主要的写,次要细节太多,归纳就没意义了,同时归纳主要是给自己看的, 而且基本都是凭自己的一些记忆和理解即时写的.不一定对和全(但大多是一些需要理解的概念),请各位看管见谅! 数据库设计篇 1.范式 A.1范式,原子性,即列不可分 B.2范式,完全依赖,即有个主键唯一区分 C.3范式,不能传递依赖,即表中不能还有其他表的非主键信息 2.模型 A.概念模型,即ER图等 B.逻辑模型,即建逻辑表 C.物理模型,即生成物理表 事务 1.四大特性, A.原子,要么..要么.. B.隔

分布式学习——基础概念篇

概述 最近这段时间一直在看分布式有关的东西,但是关于分布式自己还是不能很好的理解,所以本文对分布式基础概念进行下学习. 分布式处理 首先先了解一下分布式处理,分布式处理和集中式处理正好是相反的的体系架构,集中传输集中到式处理顾名思义就是将所有的信息都一个统一的信息中心进行处理:分布式处理就是将不同地点的,或具有不同功能的,或拥有不同数据的多台计算机利用通信网络连接起来,让各个计算机各自承担同一个工作任务的不同部分,在控制中心的管理下,同时运行,共同完成同一个工作任务. 提到分布式处理就不能不提到

js基础--javascript基础概念之语法

掌握一门语言 必须先掌握它的语法! javascript 的语法和C.Java.Perl 的语法有些相似.但是比它们更加宽松. javascript 中的一切都是严格区分大小写的.例如变量: demo 和 Demo 两个变量是完全不同的. javascript 标示符,所谓标示符 是指 变量.函数.属性 的名字或函数的参数.标示符的格式是按照以下规则组合的一个或多个字符. 1.第一个字符必须是字母,下划线,或 $ 符号. 2.其他字符可以是字母.下划线.$ . 或数字. 注意 不能把关键字 保留

js基础--javascript基础概念之数组(二)

js基础--javascript基础概念之数组 数组栈方法 数组可以像栈一样.栈是一种先进后出的数据结构,最先添加的数据最后一个出来.栈方法添加数据也称为 推入  移除数据称为 弹出. js为数值栈方法提供了 push()   和  pop() ;  两个方法. push() push() 方法接受参数就是你要添加进入到数组的值.push()  方法会将他们逐一添加到数组的末尾  数组的length属性会跟着更新数据. *push(多个数组元素值) 返回的修改后的数组长度 var array =