OpenGL入门教程(固定管线)
- 格式:pdf
- 大小:1.17 MB
- 文档页数:95
opengl入门教程OpenGL入门教程OpenGL是一种跨平台的图形库,可用于创建各种类型的图形和视觉效果。
本教程将带你入门使用OpenGL,并介绍一些基本的概念和技术。
安装OpenGL首先,你需要安装OpenGL的开发环境。
具体安装方法将因操作系统而异,以下是一些常见操作系统的安装指南。
- Windows: 在Windows上,你可以使用MinGW或者MSYS2安装OpenGL。
- macOS: OpenGL在macOS上是默认安装的,你只需要确保你的系统版本满足OpenGL的要求。
- Linux: 在Linux上,你可以使用包管理器安装OpenGL的开发环境,如apt-get (Ubuntu)或yum (Fedora)。
创建一个OpenGL窗口在开始编写OpenGL应用程序之前,你需要创建一个OpenGL 窗口来显示你的图形。
以下是使用GLUT创建一个简单窗口的例子。
```c++#include <GL/glut.h>void display() {glClear(GL_COLOR_BUFFER_BIT);glBegin(GL_TRIANGLES);glVertex2f(-0.5, -0.5);glVertex2f(0.5, -0.5);glVertex2f(0.0, 0.5);glEnd();glFlush();}int main(int argc, char** argv) {glutInit(&argc, argv);glutCreateWindow("OpenGL Window");glutDisplayFunc(display);glutMainLoop();return 0;}```运行上述代码,你将看到一个简单的OpenGL窗口中显示了一个三角形。
绘制基本图形OpenGL提供了一组基本的绘图函数,可用于绘制各种类型的图形。
以下是一些常见的绘图函数:- `glBegin(GL_POINTS)`: 用于绘制点。
OpenGL•OpenGL是一种图形应用程序编程接口(Application Programming Interface,API)。
它是一种可以对图形硬件设备特性进行访问的软件库,OpenGL被设计为一个现代化的、硬件无关的接口,因此我们可以在不考虑计算机操作系统或窗口系统的前提下,在多种不同的图形硬件系统上,完全通过软件的方式实现OpenGL的接口。
OpenGL ES•OpenGL®ES is a royalty-free, cross-platform API for rendering advanced 2D and 3D graphics on embedded and mobile systems - including consoles, phones, appliances and vehicles. It consists of a well-defined subset of desktop OpenGL suitable for low-power devices, and provides a flexible and powerful interface between software and graphics acceleration hardware.•是OpenGL的子集,本质上是编程接口规范。
•OpenGL与OpenGL ES的主要区别,在于OpenGL ES主要针对嵌入式设备使用OpenGLES 3.0•OpenGLES 3.0 实际上是 OpenGLES 2.0 的扩展版本,向下兼容 OpenGLES 2.0 ,但不兼容 OpenGLES 1.0 。
图形API汇总•OpenGL(Open Graphics Library):是一个跨编程语言、跨平台的编程图形程序接口,它将计算机的资源抽象称为一个个OpenGL的对象,对这些资源的操作抽象为一个个的OpenGL指令。
OpenGL ES入门一、前言OpenGL ES是Khronos Group创建的一系列API中的一种(官方组织是:/)。
在桌面计算机上有两套标准的3DAPI:Direct3D和OpenGL。
Direct3D实际上是运行在windows操作系统上的标准3DAPI,而OpenGL则是跨平台的,适用于Linux、多种UNIX、MAC OS X和windows。
由于OpenGL得到了广范围的认可,所以,基于嵌入式的3DAPI---OpenGL ES也就应运而生。
沃Phone使用的芯片高通7227,它能很好的提供对OpenGL ES的支持,了解OpenGL ES 的种种特性,不仅能开发出很好的适用于沃Phone的3D游戏、3D应用等。
借助于OpenGL ES的平台无关性,只要稍微修改EGL,理论上就可以将开发的3D游戏、3D应用移植到任何支持OpenGL ES的平台上去。
本篇文档就从零开始,深入简出,跟大家介绍一下OpenGL ES的原理和开发。
OpenGL ES简介什么是OpenGL ESOpenGL ES是一套适用于手持嵌入式设备的3DAPI。
比如手机、PDA、汽车、航空等等上面都可以使用到OpenGL ES。
OpenGL ES是免授权费的、跨平台的、功能完善的2D和3D 图形应用程序接口API,它是桌面OpenGL的子集,是从OpenGL裁剪定制而来的。
由于手持设备的相关局限性,OpenGL ES相对于OpenGL不可避免的进行了相关的精简。
去除了OpenGL中比如glBegin/glEnd,四边形(GL_QUADS)、多边形(GL_POL YGONS)等复杂图元等许多非绝对必要的特性。
但是OpenGL方面的很多知识,OpenGL ES都是可以借鉴的。
OpenGL ES其实是一个状态机(State machine),它保存一种状态直至其改变。
每个状态都有本身默认的缺省值,可以通过相关的查询和设置函数进行相关的查询和设置。
2.1 OpenGL Shading语言介绍这本书的目的是帮助读者学习和使用高级图形编程语言――OPENGL SHADING 语言。
对于这种语言提供支持的相关OpenGL扩展在2003年6说被ARB组织批准,并且将被加入到新的OpenGL2.0的核心中去。
当前图形硬件的变得越来越复杂,那些传统的固定功能逐渐将被可编程的功能取代。
顶点处理和面片处理就是两个这样的例子。
顶点处理包括那些对于每一个顶点进行分别运算的步骤,比如坐标转换和光照。
面片指的那些在图形数据光栅化时象素对应的数据结构。
一个面片包含更新帧缓存中某个位置数据的所有必要信息。
面片处理包括所有发生在面片级别上的操作,比较典型的例子就是从包含纹理的存储器中获得数据,以及将纹理值赋予每一个面片。
通过使用OpenGL Shading语言,用户不仅仅可以实现所有显卡的固定管线功能,而且可以做的更多.OpenGL Shading的设计使程序员能够在OpenGL渲染管线中每一个可编程的地方实现他们的想法。
通过OpenGL Shading语言的代码编写的能够在OpenGL可编程处理器上运行的程序代码叫做SHADER。
OpenGL Shader这个词有时候也用来特指那些用OpenGL Shading语言开发的shader,以和那些使用其他shading语言(比如RenderMan)开发的shader相区分。
因为在OpenGL中定义了两种可编程的处理单元,所以也对应有两种类型的shader:顶点shader和面片shader。
OpenGL可以将shader 进行编译链接,使其成为可执行程序一部分。
OpenGL Shading语言是基于C语言发展起来的,它和RenderMan以及其他的shading语言拥有相同的特征。
这种语言有丰富的数据类型定义,其中包括向量和矩阵这些与三维操作息息相关的类型定义。
一些类型qualifiers对输入和输出进行处理,使其适合shader使用。
OpenGL渲染流程⼀.什么是openGLOpenGL被定义为“图形硬件的⼀种软件接⼝”。
从本质上说,它是⼀个3D图形和模型库,具有⾼度的可移植性,具有⾮常快的速度。
⼆.管线管线这个术语描述了opengl渲染的整个过程。
openGL采⽤cs模型:c是cpu,s是GPU,c给s的输⼊是vertex信息和Texture信息,s的输出是显⽰器上显⽰的图像。
下⾯这2个图⽐较清楚的讲解了opengl的渲染管线。
相信没有opengl基础的应该看不懂,下⾯会简单的介绍这个流程,再看下⽂之前,建议先看,对理解opengl⼯作原理绝对有帮助。
三.管线详解下⾯这个图取⾃《OpenGL ES 3.0编程指南》,此流程为可编程管线。
1.VBO/VAO(顶点缓冲区对象或顶点数组对象):VBO/VAO(到底是啥,下回讲解)是cpu提供给GPU的顶点信息,包括了顶点的位置、颜⾊(只是顶点的颜⾊,和纹理的颜⾊⽆关)、纹理坐标(⽤于纹理贴图)等顶点信息。
2.VertexShader(顶点着⾊器):顶点着⾊器是处理VBO/VAO提供的顶点信息的程序。
VBO/VAO提供的每个顶点都执⾏⼀遍顶点着⾊器。
Uniforms(⼀种变量类型)在每个顶点保持⼀致,Attribute每个顶点都不同(可以理解为输⼊顶点属性)。
执⾏⼀次VertexShader输出⼀个Varying和gl_positon。
3.PrimitiveAssembly(图元装配):顶点着⾊器下⼀个阶段是图元装配,图元(prmitive)是三⾓形、直线或者点精灵等⼏何对象。
这个阶段,把顶点着⾊器输出的顶点组合成图元。
4.rasterization(光栅化):光栅化是将图元转化为⼀组⼆维⽚段的过程,然后,这些⽚段由⽚段着⾊器处理(⽚段着⾊器的输⼊)。
这些⼆维⽚段代表着可在屏幕上绘制的像素。
⽤于从分配给每个图元顶点的顶点着⾊器输出⽣成每个⽚段值的机制称作插值(Interpolation)。
现代OpenGL教程 01——入门指南欢迎大家,这是现代OpenGL教程系列的第一篇。
所有代码都是开源的,你可以在GitHub上下载:https:///tomdalling/opengl-series 通过这篇教程,你将会学到如何在Windows下用Visual Studio 2013或Mac下用Xcode搭建OpenGL 3.2工程。
该应用包含一个顶点着色器(vertex shader),一个片段着色器(fragment shader)和使用VAO和VBO来绘制的三角形。
该工程使用GLEW来访问OpenGL API,用GLFW来处理窗口创建和输入,还有使用GLM进行矩阵/矢量相关的数学运算。
这听上去有点无聊,但搭建这样的工程确实挺麻烦的,尤其对于初学者。
只要解决完这问题,我们就可以开始玩些有趣的东西了。
[TOC]获取代码所有例子代码的zip打包可以从这里获取:https:///tomdalling/opengl-series/archive/master.zip。
这一系列文章中所使用的代码都存放在:https:///tomdalling/opengl-series。
你可以在页面中下载zip,加入你会git的话,也可以复制该仓库。
本文代码你可以在source/01_project_skeleton目录里找到。
使用OS X系统的,可以打开根目录里的opengl-series.xcodeproj,选择本文工程。
使用Windows系统的,可以在Visual Studio 2013里打开opengl-series.sln,选择相应工程。
工程里已包含所有依赖,所以你不需要再安装或者配置额外的东西。
如果有任何编译或运行上的问题,请联系我。
关于兼容性的提醒本文使用OpenGL 3.2,但我会尝试保持如下兼容:向后兼容OpenGL 2.1向前兼容OpenGL 3.X和4.X兼容Android和iOS的OpenGL ES 2.0因为OpenGL和GLSL存在许多不同版本,本文代码不一定能做到100%上述兼容。