OpenGL 入门教程1

说起编程作图,大概还有很多人想起 TC 的#include <graphics.h>吧?

但是各位是否想过,那些画面绚丽的 PC 游戏是如何编写出来的?就靠 TC 那可怜的 640*480 分辨率、16

色来做吗?显然是不行的。

本帖的目的是让大家放弃 TC 的老旧图形接口,让大家接触一些新事物。

OpenGL 作为当前主流的图形 API 之一,它在一些场合具有比 DirectX 更优越的特性。

1、与 C 语言紧密结合。

OpenGL 命令最初就是用 C 语言函数来进行描述的,对于学习过 C 语言的人来讲,OpenGL 是容易理解和

学习的。如果你曾经接触过 TC 的 graphics.h,你会发现,使用 OpenGL 作图甚至比 TC 更加简单。

2、强大的可移植性。

微软的 Direct3D 虽然也是十分优秀的图形 API,但它只用于 Windows 系统(现在还要加上一个 XBOX 游

戏机) 。而 OpenGL 不仅用于 Windows,还可以用于 Unix/Linux 等其它系统,它甚至在大型计算机、各种

专业计算机(如:医疗用显示设备)上都有应用。并且,OpenGL 的基本命令都做到了硬件无关,甚至是

平台无关。

3、高性能的图形渲染。

OpenGL 是一个工业标准,它的技术紧跟时代,现今各个显卡厂家无一不对 OpenGL 提供强力支持,激烈

的竞争中使得 OpenGL 性能一直领先。

总之,OpenGL 是一个很 NB 的图形软件接口。至于究竟有多 NB,去看看 DOOM3 和 QUAKE4 等专业游

戏就知道了。

OpenGL 官方网站(英文)

http://www.opengl.org

下面我将对 Windows 下的 OpenGL 编程进行简单介绍。

学习 OpenGL 前的准备工作

第一步,选择一个编译环境

现在Windows系统的主流编译环境有Visual Studio, Broland C++ Builder, Dev-C++等, 它们都是支持OpenGL

的。但这里我们选择 Visual Studio 2005 作为学习 OpenGL 的环境。

第二步,安装 GLUT 工具包

GLUT 不是 OpenGL 所必须的,但它会给我们的学习带来一定的方便,推荐安装。

Windows 环境下的 GLUT 下载地址: (大小约为 150k)

http://www.opengl.org/resources/libraries/glut/glutdlls37beta.zip

无法从以上地址下载的话请使用下面的连接:

http://www.sundablog.com/1.zip

Windows 环境下安装 GLUT 的步骤:

1、将下载的压缩包解开,将得到 5 个文件

2、在“我的电脑”中搜索“gl.h”,并找到其所在文件夹(如果是 VisualStudio2013,则应该是其安装目录下面

的“C:\Program Files (x86)\Windows Kits\8.1\Include\um\gl 文件夹”) 。把解压得到的 glut.h 放到这个文件夹。

3、把解压得到的 glut.lib 和 glut32.lib 放到静态函数库所在文件夹(如果是 VisualStudio2013,则应该是其安

装目录下面的“C:\Program Files (x86)\Windows Kits\8.1\Lib”文件夹) 。

4、把解压得到的 glut.dll 和 glut32.dll 放到操作系统目录下面的 system32 文件夹内。 (典型的位置为:

C:\Windows\System32)

第三步,建立一个 OpenGL 工程

这里以 VisualStudio2013 为例。

选择 File->New->Project,然后选择 Win32控制台程序,点击确定

第一个 OpenGL 程序

一个简单的 OpenGL 程序如下: (注意,如果需要编译并运行,需要正确安装 GLUT,安装方法如上所述)

#include <GL/glut.h>
void myDisplay(void)
{
	glClear(GL_COLOR_BUFFER_BIT);
	glRectf(-0.5f, -0.5f, 0.5f, 0.5f);
<span style="white-space:pre">	</span>glFlush();
}
int _tmain(int argc, char* argv[])
{
<span style="white-space:pre">	</span>glutInit(&argc, argv);
<span style="white-space:pre">	</span>glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);
<span style="white-space:pre">	</span>glutInitWindowPosition(100, 100);
<span style="white-space:pre">	</span>glutInitWindowSize(400, 400);
<span style="white-space:pre">	</span>glutCreateWindow("第一个 OpenGL 程序");
<span style="white-space:pre">	</span>glutDisplayFunc(&myDisplay);
<span style="white-space:pre">	</span>glutMainLoop();
<span style="white-space:pre">	</span>return 0;
}

该程序的作用是在一个黑色的窗口中央画一个白色的矩形。下面对各行语句进行说明。

怎么样?代码还不算长吧?

首先,需要包含头文件#include <GL/glut.h>,这是 GLUT 的头文件。

本来 OpenGL 程序一般还要包含<GL/gl.h>和<GL/glu.h>,但 GLUT 的头文件中已经自动将这两个文件包含

了,不必再次包含。

然后看 main 函数。

int main(int argc, char *argv[]),这个是带命令行参数的 main 函数,各位应该见过吧?没见过的同志们请多

翻翻书,等弄明白了再往下看。

注意 main 函数中的各语句,除了最后的 return 之外,其余全部以 glut 开头。这种以 glut 开头的函数都是

GLUT 工具包所提供的函数,下面对用到的几个函数进行介绍。

1、glutInit,对 GLUT 进行初始化,这个函数必须在其它的 GLUT 使用之前调用一次。其格式比较死板,

一般照抄这句 glutInit(&argc, argv)就可以了。

2、 glutInitDisplayMode, 设置显示方式, 其中GLUT_RGB表示使用RGB颜色, 与之对应的还有GLUT_INDEX

(表示使用索引颜色) 。 GLUT_SINGLE 表示使用单缓冲, 与之对应的还有 GLUT_DOUBLE (使用双缓冲) 。

更多信息,请自己 Google。当然以后的教程也会有一些讲解。

3、glutInitWindowPosition,这个简单,设置窗口在屏幕中的位置。

4、glutInitWindowSize,这个也简单,设置窗口的大小。

5、glutCreateWindow,根据前面设置的信息创建窗口。参数将被作为窗口的标题。注意:窗口被创建后,

并不立即显示到屏幕上。需要调用 glutMainLoop 才能看到窗口。

6、glutDisplayFunc,设置一个函数,当需要进行画图时,这个函数就会被调用。 (这个说法不够准确,但

准确的说法可能初学者不太好理解,暂时这样说吧) 。

7、glutMainLoop,进行一个消息循环。 (这个可能初学者也不太明白,现在只需要知道这个函数可以显示

窗口,并且等待窗口关闭后才会返回,这就足够了。 )

在 glutDisplayFunc 函数中,我们设置了“当需要画图时,请调用 myDisplay 函数”。于是 myDisplay 函数就

用来画图。观察 myDisplay 中的三个函数调用,发现它们都以 gl 开头。这种以 gl 开头的函数都是 OpenGL

的标准函数,下面对用到的函数进行介绍。

1、glClear,清除。GL_COLOR_BUFFER_BIT 表示清除颜色,glClear 函数还可以清除其它的东西,但这里

不作介绍。

2、glRectf,画一个矩形。四个参数分别表示了位于对角线上的两个点的横、纵坐标。

3、glFlush,保证前面的 OpenGL 命令立即执行(而不是让它们在缓冲区中等待) 。其作用跟 fflush(stdout)

类似。

时间: 2024-10-11 11:23:45

OpenGL 入门教程1的相关文章

OpenGL 入门教程5

在前面绘制几何图形的时候,大家是否觉得我们绘图的范围太狭隘了呢?坐标只能从-1 到 1,还只能是 X 轴向右,Y轴向上,Z 轴垂直屏幕.这些限制给我们的绘图带来了很多不便. 我们生活在一个三维的世界--如果要观察一个物体,我们可以: 1.从不同的位置去观察它. (视图变换) 2.移动或者旋转它,当然了,如果它只是计算机里面的物体,我们还可以放大或缩小它. (模型变换) 3.如果把物体画下来,我们可以选择:是否需要一种"近大远小"的透视效果.另外,我们可能只希望看到 物体的一部分,而不是

OPENGL入门教程

OpenGL入门学习1:编写第一个OpenGL程序http://www.c3dn.net/forum.php?mo ... d=20&extra=page%3D3OpenGL入门学习2:点.直线和多边形http://www.c3dn.net/forum.php?mo ... id%3D5%26typeid%3D5OpenGL入门学习3:绘制几何图形的细节http://www.c3dn.net/forum.php?mo ... id%3D5%26typeid%3D5OpenGL入门学习4:颜色的选

OpenGL 入门教程2

说明一下 csdn 写文章的代码端 不用 本次课程所要讲的是绘制简单的几何图形,在实际绘制之前,让我们先熟悉一些概念. 一.点.直线和多边形 我们知道数学(具体的说,是几何学)中有点.直线和多边形的概念,但这些概念在计算机中会有所不同. 数学上的点,只有位置,没有大小.但在计算机中,无论计算精度如何提高,始终不能表示一个无穷小的 点.另一方面,无论图形输出设备(例如,显示器)如何精确,始终不能输出一个无穷小的点.一般情况 下,OpenGL 中的点将被画成单个的像素(像素的概念,请自己搜索之~)

OpenGL 入门教程3

点的大小默认为 1 个像素,但也可以改变之.改变的命令为 glPointSize,其函数原型如下: void glPointSize(GLfloat size); size 必须大于 0.0f,默认值为 1.0f,单位为"像素". 注意:对于具体的 OpenGL 实现,点的大小都有个限度的,如果设置的 size 超过最大值,则设置可能会有 问题. 例子 void myDisplay(void) { glClear(GL_COLOR_BUFFER_BIT); glPointSize(5.

OpenGL 入门教程4

OpenGL 支持两种颜色模式:一种是 RGBA,一种是颜色索引模式. 无论哪种颜色模式,计算机都必须为每一个像素保存一些数据.不同的是,RGBA 模式中,数据直接就代 表了颜色:而颜色索引模式中,数据代表的是一个索引,要得到真正的颜色,还必须去查索引表. 1. RGBA 颜色 RGBA 模式中,每一个像素会保存以下数据:R 值(红色分量) .G 值(绿色分量) .B 值(蓝色分量)和 A 值(alpha 分量) .其中红.绿.蓝三种颜色相组合,就可以得到我们所需要的各种颜色,而 alpha 不

转:openGL入门(1)

                    OpenGL入门教程 第一课: 说起编程作图,大概还有很多人想起TC的#include <graphics.h>吧? 但是各位是否想过,那些画面绚丽的PC游戏是如何编写出来的?就靠TC那可怜的640*480分辨率.16色来做吗?显然是不行的. 本帖的目的是让大家放弃TC的老旧图形接口,让大家接触一些新事物. OpenGL作为当前主流的图形API之一,它在一些场合具有比DirectX更优越的特性. 1.与C语言紧密结合. OpenGL命令最初就是用C语言函

【OpenCV入门教程之三】 图像的载入,显示和输出 一站式完全解析

了解过之前老版本OpenCV的童鞋们都应该清楚,对于OpenCV1.0时代的基于 C 语言接口而建的图像存储格式IplImage*,如果在退出前忘记release掉的话,就会造成内存泄露.而且用起来超级麻烦,我们往往在debug的时候,很大一部分时间在纠结手动释放内存的问题.虽然对于小型的程序来说手动管理内存不是问题,但一旦我们写的代码变得越来越庞大,我们便会开始越来越多地纠缠于内存管理的问题,而不是着力解决你的开发目标. 这,就有些舍本逐末的感觉了. 而自从OpenCV踏入2.0时代,用Mat

iOS开发入门教程_iOS开发视频教程

iOS开发入门教程 (Object-C.网络编程.多线程.蓝牙.二维码.Cocos2D.OpenGL)适合人群:初级课时数量:34课时用到技术:IOS,Object-C,OpenGL,XCode,Cocos 2D涉及项目:Cocos+2D.Game Kit蓝牙数据处理等咨询QQ:1840215592 iOS开发入门教程详细查看:http://www.ibeifeng.com/goods-471.html1.1.课程目标iOS开发入门教程内容的目标是初学者入门,让入门者提高,让所有人符合企业招聘的

OpenGL入门学习

说起编程作图,大概还有很多人想起TC的#include <graphics.h>吧? 但是各位是否想过,那些画面绚丽的PC游戏是如何编写出来的?就靠TC那可怜的640*480分辨率.16色来做吗?显然是不行的. 本帖的目的是让大家放弃TC的老旧图形接口,让大家接触一些新事物. OpenGL作为当前主流的图形API之一,它在一些场合具有比DirectX更优越的特性. 1.与C语言紧密结合. OpenGL命令最初就是用C语言函数来进行描述的,对于学习过C语言的人来讲,OpenGL是容易理解和学习的