OPENGL架构
第2章 OpenGL 简介
每台计算机都有专门处理图形的硬件,它们控制着屏幕上显示的内容。OpenGL向这种硬件发出命令,告诉它们执行什么操作。计算机游戏或者其他任意软件借助制造商提供的设备驱动程序,使用OpenGL向图形硬件发出命令,如图2-1所示。
|
| 图2-1 OpenGL的典型应用 |
OpenGL(Open Graphics Library,开放图形库)是游戏开发商使用最早、最流行的图形库之一。OpenGL是Silicon Graphics公司(SGI)在1992年开发的,但是直到1997的GLQuake中采用了这种图形库以后,游戏开发商才真正对它产生了兴趣。GameCube、Wii、PlayStation 3和iPhone都把OpenGL作为它们的图形库的基础。
除了OpenGL之外,还有一个选择是Microsoft的DirectX。DirectX由更多的库组成,包括声音和输入,所以把OpenGL与DirectX中的Direct3D库进行比较更加合适。DirectX的最新版本是DirectX 11。Xbox 360使用的是DirectX 9.0。DirectX 10和DirectX 11只能在安装了Windows Vista或Windows 7操作系统的计算机上使用。
Direct3D和OpenGL的功能集基本相同。现在游戏引擎(例如Unreal)通常构建一个抽象层,允许用户根据情况在OpenGL和Direct3D之间切换,如图2-2所示。当开发跨平台的游戏,例如需要把游戏发布到PlayStation 3和Xbox 360上时,必须提供这种抽象。Xbox 360必须使用Direct3D调用,而PS3必须使用OpenGL调用。
|
| 图2-2 使用抽象层 |
DirectX和OpenGL都是非常优秀的图形库。DirectX工作在Microsoft平台上,而OpenGL可以应用到更加广泛的平台上。DirectX更新得更快,意味着它可以利用最新的图形功能。OpenGL的更新较慢,最新的图形功能只能通过一个不太方便的扩展机制使用。OpenGL这种缓慢的更新有一个明显的好处,即接口很少发生改变,所以多年前编写的代码仍然可以使用最新的OpenGL版本。DirectX的每个新版本都会改变接口,所以无法维持兼容性,必须调整和修改较老的代码才能使它们利用DirectX的新版本。
通过Managed DirectX库,可以在C#中使用DirectX,但遗憾的是,官方不再支持或更新这些库。Managed DirectX已经被Microsoft的XNA游戏创建库替代。XNA使用DirectX,但它是一个更高层的框架,用于快速创建游戏原型和开发游戏。SlimDX是一个针对DirectX开发的独立的C# API,可以作为Managed Directx的一个不错的替代品。
2.1 OpenGL的架构
OpenGL是一个C风格的图形库。C风格是指OpenGL中没有类或对象,而只有大量的函数。OpenGL在内部就是一个状态机。函数调用会修改OpenGL的内部状态,这又会影响OpenGL的行为和在屏幕上渲染多边形的方式。OpenGL是状态机这个事实会带来一些问题,例如在代码中无意间修改了其他某个部分的状态,从而导致出现bug。因此,留意哪些状态发生改变十分重要。
OPENGL架构的更多相关文章
- 现代3D图形编程学习-基础简介(3)-什么是opengl (译)
本书系列 现代3D图形编程学习 OpenGL是什么 在我们编写openGL程序之前,我们首先需要知道什么是OpenGL. 将OpenGL作为一个API OpenGL 通常被认为是应用程序接口(API) ...
- 最简单的视音频播放示例5:OpenGL播放RGB/YUV
本文记录OpenGL播放视频的技术.OpenGL是一个和Direct3D同一层面的技术.相比于Direct3D,OpenGL具有跨平台的优势.尽管在游戏领域,DirectX的影响力已渐渐超越OpenG ...
- 最简单的视音频播放演示样例5:OpenGL播放RGB/YUV
===================================================== 最简单的视音频播放演示样例系列文章列表: 最简单的视音频播放演示样例1:总述 最简单的视音频 ...
- 你需要知道的OpenGL
它是谁? OpenGL(英语:Open Graphics Library,译名:开放图形库或者“开放式图形库”)是用于渲染2D.3D矢量图形的跨语言.跨平台的应用程序编程接口(API).这个接口由近3 ...
- OpenTK学习笔记
OpenGL定义 OpenGL被定义为"图形硬件的一种软件接口".实质上是3D图形和模型库,具有高度可移植性,具有非常快的速度. OpenGL架构 术语pipeline常用于阐述彼 ...
- 浅谈移动端 View 的显示过程
作者:个推安卓开发工程师 一七 随着科技的发展,各种移动端早已成为人们日常生活中不可或缺的部分,人们使用移动端产品工作.社交.娱乐……移动端界面的流畅性已经成为影响用户体验的重要因素之一.那么你是否思 ...
- OpenGL Insights 阅读有感 - Tile Based架构下的性能调校 翻译
Performance Tunning for Tile-Based Architecture Tile-Based架构下的性能调校 by Bruce Merry GameKnife译 译序 在大概1 ...
- 基于C/S架构的3D对战网络游戏C++框架_04客户端详细设计与OpenGL、Qt基础
本系列博客主要是以对战游戏为背景介绍3D对战网络游戏常用的开发技术以及C++高级编程技巧,有了这些知识,就可以开发出中小型游戏项目或3D工业仿真项目. 笔者将分为以下三个部分向大家介绍(每日更新): ...
- 基于OpenGL编写一个简易的2D渲染框架-08 重构渲染器-整体架构
事实上,前面编写的渲染器 Renderer 非常简陋,虽然能够进行一些简单的渲染,但是它并不能满足我们的要求. 当渲染粒子系统时,需要开启混合模式,但渲染其他顶点时却不需要开启混合模式.所以同时渲染粒 ...
随机推荐
- beego学习笔记(2)
BEEGO的几个特点: 简单化 RESTful 支持.MVC 模型,可以使用 bee 工具快速地开发应用,包括监控代码修改进行热编译.自动化测试代码以及自动化打包部署. 智能化 支持智能路由.智能监控 ...
- Mysql的刷脏页问题
平时的工作中,不知道你有没有遇到过这样的场景,一条 SQL 语句,正常执行的时候特别快,但是有时也不知道怎么回事,它就会变得特别慢,并且这样的场景很难复现,它不只随机,而且持续时间还很短. 当内存数据 ...
- 【PAT】1008. 数组元素循环右移问题 (20)
1008. 数组元素循环右移问题 (20) 一个数组A中存有N(N>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移M(M>=0)个位置,即将A中的数据由(A0A1……AN- ...
- JavaScript中继承的实现
继承是类和类之间的关系,继承使得子类别具有父类别的属性和方法. js里常用的如下两种继承方式: 原型链继承(对象间的继承) 类式继承(构造函数间的继承) 由于js不像java那样是真正面向对象的语言, ...
- 【LOJ】#2012. 「SCOI2016」背单词
题解 我们发现第一种操作肯定不可取,每个节点里它最近的点是它最长出现过的后缀,发现这就是AC自动机的fail节点,根据fail的关系这会是一棵树,而一个单词的前一个序号最大的后缀必定是它的父亲 然后我 ...
- SaltStack的salt-ssh使用及LAMP状态设计部署(五)
一.salt-ssh的使用 官方文档:https://docs.saltstack.com/en/2016.11/topics/ssh/index.html (1)安装salt-ssh [root@l ...
- Java 性能优化手册 — 提高 Java 代码性能的各种技巧
转载: Java 性能优化手册 - 提高 Java 代码性能的各种技巧 Java 6,7,8 中的 String.intern - 字符串池 这篇文章将要讨论 Java 6 中是如何实现 String ...
- 实现RMQ的两种常用方法
RMQ RMQ(Range Maximum/Minimum Question)是指区间最值问题,在OI中较为常见,一般可以用ST表和线段树实现. ST表是基于倍增思想的一种打表方法,在确定区间范围和所 ...
- 洛谷P3812 【模板】线性基 [线性基]
题目传送门 线性基 题目描述 给定n个整数(数字可能重复),求在这些数中选取任意个,使得他们的异或和最大. 输入输出格式 输入格式: 第一行一个数n,表示元素个数 接下来一行n个数 输出格式: 仅一行 ...
- TCP/IP——ARP与RARP简记
ARP(Address Resolution Protocol):ARP为IP地址到对应的硬件地址(MAC)之间提供动态映射.这个过程是自动完成的,一般应用程序用户和系统管理员不必要关心. ARP高速 ...