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 非常简陋,虽然能够进行一些简单的渲染,但是它并不能满足我们的要求. 当渲染粒子系统时,需要开启混合模式,但渲染其他顶点时却不需要开启混合模式.所以同时渲染粒 ...
随机推荐
- Java容器概述
如果一个程序只包含固定数量的且其生命期都是己知的对象. 那么这是一个非常简单的程序. 通常,程序总是根据运行时才知道的某些条件去创建新对象.在此之前,不会知道所需对象的数量,甚至不知道确切的类型.为解 ...
- DEDECMS如何让栏目外部链接在新窗口中打开
dede的栏目打开方式默认的“当前窗口打开”,可以用下面两种方法让dede栏目在新窗口中打开. 方法1. 查找模板中的head.htm 将 <li><a href='[field:t ...
- OpenCV3学习笔记
http://blog.csdn.net/u010429424/article/details/73691001 http://blog.csdn.net/zhaoxfxy/article/detai ...
- jmeter------线程组(默认)
Jmeter中的采样器必须要基于线程组. 一.添加线程组 在测试计划上右键,然后选择,如下图: 二.线程组界面 三.线程组界面配置说明 1.名称:线程组自定义名称: 2.注释:添加的一些备注说明信息, ...
- Eclipse如何定位到某一个类所在硬盘上的位置
解决方法:安装OpenExplorer_1.5.0.v201108051513.jar插件 将OpenExplorer_1.5.0.v201108051513.jar文件添加到Eclipse所在目录下 ...
- IEEEXtreme 10.0 - Mysterious Maze
这是 meelo 原创的 IEEEXtreme极限编程大赛题解 Xtreme 10.0 - Mysterious Maze 题目来源 第10届IEEE极限编程大赛 https://www.hacker ...
- 在ubuntu下安装kaldi基本步骤
注:最近在学习kaldi语音识别工具,在安装过程中遇到了许多问题,在此记录,以备后需. 在一开始,我看了这篇博客(http://blog.topspeedsnail.com/archives/1001 ...
- 使用matlab表示“段数不确定”的分段函数
示例函数: 分段函数f(x)的段数为数组a的长度减1,在表达f(x)时,不能直接使用a的长度5-1=4. 方法1: 先计算每个间隔点的函数值f(a2),f(a3),f(a4),再循环表示f(x). f ...
- easyui layout 左右面板折叠后 显示标题
(function($){ var buttonDir = {north:'down',south:'up',east:'left',west:'right'}; $.extend($.fn.l ...
- Good Bye 2014 F - New Year Shopping
F - New Year Shopping 对于一种特殊的不可逆的dp的拆分方法.. 也可以用分治写哒. #include<bits/stdc++.h> #define LL long l ...