首页 购物 网址 三丰软件 | 小说 美女秀 图库大全 游戏 笑话 | 下载 开发知识库 新闻 开发 图片素材
多播视频美女直播
↓电视,电影,美女直播,迅雷资源↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
移动开发 架构设计 编程语言 Web前端 互联网
开发杂谈 系统运维 研发管理 数据库 云计算 Android开发资料
资讯 业界资讯 软件杂谈 编程开发 网站建设 网络观查 搜索引擎 移动应用 网站运营 网络地图
开发 移动开发 Web前端 架构设计 编程语言 互联网 数据库 系统运维 云计算 开发杂谈
[架构设计] OpenGL入门和示例程序
OpenGL入门和示例程序

大家好,今天雅乐网给大家介绍一下OpenGL的一些基本语法和一个简单的示例程序。
OpenGL是什么呢?说简单一点,就是一个图形软件包,它提供了许多函数供我们调用。我们看看维基百科上的说法

开放图形库(英语:Open Graphics Library,缩写为OpenGL)是个定义了一个跨编程语言、跨平台的应用程序接口(API)的规范,它用于生成二维、三维图像。这个接口由近三百五十个不同的函数调用组成,用来从简单的图形比特绘制复杂的三维景象。而另一种程序接口系统是仅用于Microsoft Windows上的Direct3D。OpenGL常用于CAD、虚拟实境、科学可视化程序和电子游戏开发。

因为不同的平台对图形的处理不一样,编程时需要分别对待。但是有了这个规范化的OpenGL,我们可以轻松写出跨平台的图形应用。而且直接使用OPenGL提供的函数非常方便,简化了开发过程。目前OpenGL的规范管理者包括SGI,Microsoft,Intel,IBM,SUN等知名公司,已经成为实际上的工业标准。与之类似的还有微软的DIrect X和Adobe的Postscript等。

OpenGL的绘制流程


OpenGL位于操作系统和应用软件之间,给软件开发提供支持。
OpenGL入门和示例程序 1

OpenGL在计算机系统中的层次
OpenGL的绘制流程如下图所示。软件调用OpenGL提供的api函数,OpenGL的函数把绘制图形的命令送到命令缓冲区,命令缓冲区的数据会进行一些变换、光照,投影,将结果数据送到光栅化流程中,最后,光栅化的结果被送入帧缓存,图像就显示在屏幕上了。
OpenGL入门和示例程序 2

一个简单的OpenGL绘制流程图
注意:只有命令缓冲区被清空时,缓冲区的命令和数据才会传递给下一个阶段,OpenGL命令才会执行。

OpenGL的函数库


OpenGL主要由以下几个函数库组成。
  1. OpenGL核心库。以gl为前缀,支持所有OpenGL平台。主要功能:常规和核心图形处理。
  2. OpenGL实用程序库,以glu为前缀,支持所有OpenGL平台。主要功能:通过调用核心库实现复杂功能,例如纹理映射、坐标变换。
  3. OpenGL编程辅助库,以aux为前缀,并不支持所有的平台。主要用于窗口管理、输入输出和简单三维形体绘制。
  4. OpenGL实用程序工具包(GLUT),以glut为前缀,支持所有平台。主要提供基于窗口的工具,例如创建窗口、菜单等
  5. Windows专用库。wgl前缀。

函数命名规律


一般函数遵循 <库前缀><命令><参数个数><参数类型>的规则。
一些符号常量以GL开头。

数据类型

OpenGL数据类型 内部表示法 定义为C类型 C字面值后缀
GLbyte 8位整数 signed char b
GLshort 16位整数 short s
GLint,GLsizei 32位整数 long l
GLfloat,GLclampf 32位浮点数 float f
GLdouble,GLclampd 64位浮点数 double d
GLubyte,GLboolean 8位无符号整数 unsigned char ub
GLshort 16位无符号整数 unsigned short us
GLuint,GLenum,GLbitfield 32位无符号整数 unsigned long ui

一个完整的OpenGL程序


OpenG开发环境的搭建可以参考
VS2013 Express配置OpenGL

下面介绍的是一个画矩形的程序。

1. 头文件


OpenGL没有包含窗口系统,因此要在头文件中引入。如果在windows下,可以引入

C


1
2
3

#include <windows.h>
#include <gl/gl.h>
#include <gl/glu.h>

而如果使用GLUT进行窗口管理,可以直接包含glut.h ,glut.h保证了gl.h和glu.h被包含。

2. 窗口管理


使用GLUT首先需要初始化,并对命令行参数进行处理。
glutInit(&argc, argv);
接着就可以创建窗口了,但是在创建窗口之前还要设置一些窗口的样式

C


1
2
3

glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB); //指定单缓存 使用RGB颜色模型
glutInitWindowSize(400, 300); //窗口大小
glutInitWindowPosition(100, 120); //窗口起始位置 左上角为0,0

窗口大小和位置不设置的话就是默认设置
设定样式后可以创建窗口了
glutCreateWindow(“My first OpenGL demo”);
该函数的参数是窗口的标题。
创建窗口后,需要指定窗口要显示的内容了。通常把要显示的内容写到一个显示回调函数中。
glutDisplayFunc(Display);
Display函数就是当前窗口显示内容的函数。在每次屏幕刷新,窗口重绘时,都会调用Display函数。
这时候还需要最后一步了,调用函数glutMainLoop(); 让窗口运行起来,让回调函数进行工作。

3. OpenGL绘图


绘图之前可以先初始化窗口的一些设置。
glClearColor(1.0f, 1.0f, 1.0f, 1.0f);
指定窗口背景色为白色。四个参数分别为红 绿 蓝 和Alpha成分(透明)。由于本次程序没有混合,所以使用不透明。
设置背景色后,可以使用函数glClear(GL_COLOR_BUFFER_BIT);将背景色应用到窗口。
类似的还可以使用glColor设置图形绘制颜色。
因为OpenGL对图形的处理都是以三维方式进行,所以需要设置投影到二维
glMatrixMode(GL_PROJECTION);
gluOrtho2D(0.0, 200.0, 0.0, 150.0);
这两个函数使用正投影将横坐标0-200 纵坐标0-150内的区域投影到窗口。
然后就可以绘制矩形了
glRectf(50.0f, 100.0f, 150.0f, 50.0f);
绘制一个左上角50,100 右下角150 50的矩形。
最后在回调函数中,需要用glFlush();函数清空命令缓存,强制执行命令缓存区的所有命令、
我们一般习惯把一些只进行一次的函数写到一个初始化函数中,而把绘图函数写进去回调函数中。

完整的源代码



C


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30

#include <gl/glut.h>
 
void Initial(void)
{
glClearColor(1.0f, 1.0f, 1.0f, 1.0f);
glMatrixMode(GL_PROJECTION);
gluOrtho2D(0.0, 200.0, 0.0, 150.0);
}
 
void Display(void)
{
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(1.0f, 0.0f, 0.0f);
glRectf(50.0f, 100.0f, 150.0f, 50.0f);
glFlush();
}
 
int main(int argc, char * argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
glutInitWindowSize(400, 300);
glutInitWindowPosition(100, 120);
glutCreateWindow("My first OpenGL demo");
glutDisplayFunc(Display);
Initial();
glutMainLoop();

return 0;
}

测试程序运行正常
如果你的笔记本不显示图形,可能是因为双显卡的问题,可以参考
OpenGL画矩形不显示矩形 显示不出来

OpenGL入门和示例程序 3



 此文从网络中自动搜索生成,不代表本网站赞成被搜索网站的内容或立场    查看原文
360图书馆 软件开发资料 文字转语音 购物精选 软件下载 新闻资讯 小游戏 Chinese Culture 股票 三丰软件 开发 中国文化 网文精选 阅读网 看图 日历 万年历 2018年12日历
2018-12-13 6:56:54
 
  网站联系 软件世界网-www.sjsjw.com ©2014 蜀ICP备06016416号 三峰网旗下网站