OpenGL图形编程入门

合集下载

opengl学习(三)----绘制简单图形(一)

opengl学习(三)----绘制简单图形(一)

opengl学习(三)----绘制简单图形(⼀)今天说⼀说⼏种简单的图元。

所有的⼏何图元都是根据它们的顶点来描绘的。

⽽顶点就是它们在屏幕上的坐标位置。

我喜欢把这⼏个简单的图元称为点线⾯。

点,可以看到⼀个顶点;线,就是两个顶点指定的⼀条有限长度的线段;⾯,其实更准确讲是⼀个凸多边形。

opengl⾥所讲的多边形是内部⽤颜⾊填充的,视觉上称为⾯我个⼈认为是更贴近的。

当然,多边形也是由指定的顶点组成的。

需要注意的是,要想被opengl按照设计被绘制必须正确的认识到,所谓的多边形是顶点都处于⼀个平⾯上,凸多边形。

凸多边形不能理解的,请问度娘。

来看⼀个例⼦:C++代码1. glBegin(GL_POLYGON);2. glVertex2f(0.0, 0.0);3. glVertex2f(0.0, 3.0);4. glVertex2f(4.0, 3.0);5. glVertex2f(6.0, 1.5);6. glVertex2f(4.0, 0.0);7. glEnd();先不去关⼼代码本⾝,这段代码最终的结果是要指定5个顶点绘制⼀个凸五边形。

注意,不是5条线段⽽是⼀个凸五边形的平⾯。

不管是点线⾯的哪⼀种,都是需要指定⼀组顶点的。

如何判定顶点指定的开始和结束就是glBegin和glEnd的⼯作。

引⽤void glBegin(Glenum mode);标志着⼀个顶点数据列表的开始,它描述了⼀个⼏何图元。

mode参数指定了图元的类型。

void glEnd(void);标志着⼀个顶点数据列表的结束。

mode设置的不同,代表着将要绘制的图元也不同。

下⾯这个表就是图元的名称和含义:值含义GL_POINTS 单个的点GL_LINES ⼀对顶点被解释为⼀条直线GL_LINE_STRIP ⼀系列的连接直线GL_LINE_LOOP 和上⾯相同,但第⼀个顶点和最后⼀个顶点彼此相连GL_TRIANGLES 3个顶点被解释为⼀个三⾓形GL_TRIANGLES_STRIP 三⾓形的连接串GL_TRIANGLES_FAN 连接成扇形的三⾓形系列GL_QUADS 4个顶点被解释为⼀个四边形GL_QUADS_STRIP 四边形的连接串GL_POLYGON 简单的凸多边形的边界试想着,如果将glBegin(GL_POLYGON)修改为glBegin(GL_POINTS),绘制出来的将是什么图形呢? 哈哈,那就是5个点⽽已么。

OpenGL入门学习

OpenGL入门学习
1、与C语言紧密结合。
OpenGL命令最初就是用C语言函数来进行描述的,对于学习过C语言的人来讲,OpenGL是容易理解和学习的。如果你曾经接触过TC的graphics.h,你会发现,使用OpenGL作图甚至比TC更加简单。
2、强大的可移植性。
微软的Direct3D虽然也是十分优秀的图形API,但它只用于Windows系统(现在还要加上一个XBOX游戏机)。而OpenGL不仅用于Windows,还可以用于Unix/Linux等其它系统,它甚至在大型计算机、各种专业计算机(如:医疗用显示设备)上都有应用。并且,OpenGL的基本命令都做到了硬件无关,甚至是平台无关。
glutInitWindowPosition(100, 100);
glutInitWindowSize(400, 400);
glutCreateWindow("第一个OpenGL程序");
glutDisplayFunc(&myDisplay);
glutMainLoop();
return 0;
}
该程序的作用是在一个黑色的窗口中央画一个白色的矩形。下面对各行语句进行说明。
下面我将对Windows下的OpenGL编程进行简单介绍。
第一步:选择一个编译环境现在Windows系统的主流编译环境有Visual Studio,Broland C++ Builder,Dev-C++等,它们都是支持OpenGL的。但这里我们选择VC++ 6.0作为学习OpenGL的环境。
第二步:安装GLUT工具包GLUT不是OpenGL所必须的,但它会给我们的学习带来一定的方便,推荐安装。
3、glutInitWindowPosition,这个简单,设置窗口在屏幕中的位置。

2.1OpenGL

2.1OpenGL

图形学和API| 图形学、 图 学 API和OpenGL | 学习API的方法y y正向学习 反向学习第二章 OpenGL编程| 2.1 | 2.2 | 2.3OpenGL简介 一个简单OpenGL程序例子 三维图形绘制2 1 OpenGL简介 2.1SGI 与 GL| SiliconGraphics (SGI) 通过硬件实现流水线体 过 件实 流水线体 系,改良了图形工作站 (1982) | 应用程序通过一个称为GL的库与系统通讯 | 借助于GL,可以非常简单地设计出三维交互图 形应用程序5OpenGL| GL的成功导致了 的成功导致 OpenGL的出现 的 (1992),这是 这一个与平台无关的API:yy y y y开放的三维图形软件包,它独立于窗口系统和操作系 统,以它为基础开发的应用程序可以十分方便地在各 种平台间移植 与Visual C++紧密接口,易于使用 与硬件非常贴近 从而可以充分发挥其功能 与硬件非常贴近,从而可以充分发挥其功能 着重在于渲染(rendering) 没有提供窗 和输入接 没有提供窗口和输入接口,从而避免依赖于具体的窗 从而避免依赖于具体的窗 口系统6OpenGL 库| OpenGL O GLy y y核心库 实用库 (GLU)Windows: OpenGL32 大多数unix/linux i /li 系统 GL 系统: 利用OpenGL O GL核心库提供一些功能,从而避免重复编 核心库提供 些功能 从而避免重复编 写代码 X window 系统:GLX Windows: WGL Macintosh:AGL7| OpenGL| 与窗口系统的连接y y yGLUT| OpenGLy|实用 实用工具库 库 (GLUT)提供所有窗口系统的共同功能打开窗口 | 从鼠标和键盘获取输入 | 菜单 | 时间驱动y代码可以在平台间移植,但是GLUT缺乏在特定平台 上优秀工具包所具有的功能|滚动条 /resources/libraries/glut/8y官方地址|软件组织应用程序OpenGL Motif widget or similarGLUT GLU GLGLX, AGL or WGLX, Win32, Mac O/S 图形软硬件9OpenGL 函数| 基本图元函数 基本图 数y点 Points, 线段 Line Segments, 多边形 Polygons等| 属性函数 | 视图函数 | 变换函数 | 输入函数(GLUT) | 控制函数(GLUT) | 查询函数10OpenGL 状态| OpenGL是一个状态机( 个状态机 state machine) | OpenGL 函数具有两种类型y生成基本形状如果形状可见,则得到输出 | 对顶点的处理和图元的表现由状态控制|y改变状态,或返回状态信息变换函数 | 属性函数|11面向对象方面的缺陷| OpenGL不是面向对象的,因此逻辑上的一 面向 象的 此 辑上的个函数却对应着多个OpenGL函数:glVertex3f glVertex2i glVertex3dv| 内在存储模式是相同的 式 | 容易在C++中创建重载函数,但效率却成为主要问题。

OpenGL编程指南

OpenGL编程指南

OpenGL基础图形编程- 总目录出处:中国游戏开发者[ 2001-09-20 ]作者:总目录第一章OpenGL与三维图形世界1.1 OpenGL使人们进入三维图形世界1.2 OpenGL提供直观的三维图形开发环境1.3 OpenGL称为目前三维图形开发标准第二章OpenGL概念建立2.1 OpenGL基本理解2.2 OpenGL工作流程2.3 OpenGL图形操作步骤第三章Windows NT环境下的OpenGL3.1 Windows NT下的OpenGL函数3.2 OpenGL基本功能3.3 Windows NT下OpenGL结构第四章OpenGL基本程序结构第五章OpenGL数据类型和函数名第六章OpenGL辅助库的基本使用6.1 辅助库函数分类6.2 辅助库应用示例第七章OpenGL建模7.1 描述图元7.1.1 齐次坐标7.1.2 点7.1.3 线7.1.4 多边形7.2 绘制图元7.2.1 定义顶点7.2.2 构造几何图元第八章OpenGL变换8.1 从三维空间到二维平面8.1.1 相机模拟8.1.2 三维图形显示流程8.1.3 基本变换简单分析8.2 几何变换8.2.1 两个矩阵函数解释8.2.2 平移8.2.3 旋转8.2.4 缩放和反射8.2.5 几何变换举例8.3 投影变换8.3.1 正射投影8.3.2 透视投影8.4 裁剪变换8.5 视口变换8.6 堆栈操作第九章OpenGL颜色9.1 计算机颜色9.1.1 颜色生成原理9.1.2 RGB色立体9.2 颜色模式9.2.1 RGBA模式9.2.2 颜色表模式9.2.3 两种模式应用场合9.3 颜色应用举例第十章OpenGL光照10.1 真实感图形基本概念10.2 光照模型10.2.1 简单光照模型10.2.2 OpenGL光组成10.2.3 创建光源10.2.4 启动光照10.3 明暗处理10.4 材质10.4.1 材质颜色10.4.2 材质定义10.4.3 材质RGB值和光源RGB值的关系10.4.4 材质改变第十一章OpenGL位图和图像11.1 位图11.1.1 位图和字符11.1.2 当前光栅位置11.1.3 位图显示11.2 图像11.2.1 象素读写11.2.2 象素拷贝11.2.3 图像缩放11.2.4 图像例程第十二章OpenGL纹理12.1 基本步骤12.2 纹理定义12.3 纹理控制12.3.1 滤波12.3.2 重复与约简12.4 映射方式12.5 纹理坐标12.5.1 坐标定义12.5.2 坐标自动产生第十三章OpenGL复杂物体建模13.1 图元扩展13.1.1 点和线13.1.2 多边形13.2 法向计算13.2.1 法向基本计算方法13.2.2 法向定义13.3 曲线生成13.3.1 曲线绘制举例13.3.2 曲线定义和启动13.3.3 曲线坐标计算13.3.4 定义均匀间隔曲线坐标值13.4 曲面构造13.4.1 曲面定义和坐标计算13.4.2 定义均匀间隔的曲面坐标值13.4.3 纹理曲面13.4.4 NURBS曲面第十四章OpenGL特殊光处理14.1 光照模型14.1.1 全局环境光14.1.2 近视点与无穷远视点14.1.3 双面光照14.2 光源位置与衰减14.3 聚光与多光源14.3.1 聚光14.3.2 多光源与例程14.4 光源位置与方向的控制14.5 辐射光第十五章OpenGL效果处理15.1 融合15.1.1 Alpha值与融合15.1.2 融合因子15.1.3 融合实例15.2 反走样15.2.1 行为控制函数15.2.2 点和线的反走样15.2.3 多边形的反走样15.3 雾15.3.1 雾的概论和例程15.3.2 雾化步骤第十六章OpenGL显示列表16.1 显示列表概论16.1.1 显示列表的优势16.1.2 显示列表的适用场合16.2 创建和执行显示列表16.2.1 创建显示列表16.2.2 执行显示列表16.3 管理显示列表16.4 多级显示列表第十七章OpenGL帧缓存和动画17.1 帧缓存17.1.1 帧缓存组成17.1.2 缓存清除17.2 动画【下页】【打印】【关闭】[ 字号:大·中·小]OpenGL基础图形编程- OpenGL与3D图形世界出处:中国游戏开发者[ 2001-09-20 ]作者:目录1.1 OpenGL使人们进入三维图形世界1.2 OpenGL提供直观的三维图形开发环境1.3 OpenGL成为目前三维图形开发标准1.1、OpenGL使人们进入三维图形世界我们生活在一个充满三维物体的三维世界中,为了使计算机能精确地再现这些物体,我们必须能在三维空间描绘这些物体。

openl之快速入门

openl之快速入门

第一章基于VC++的OpenGL编程讲座之概述前言随着计算机多媒体技术、可视化技术及图形学技术的发展,我们可以使用计算机来精确地再现现实世界中的绚丽多彩的三维物体,并充分发挥自身的创造性思维,通过人机交互来模拟、改造现实世界,这就是目前最为时髦的虚拟现实技术。

通过这种技术,建筑工程师可以直接设计出美观的楼房模型;军事指挥员可以模拟战场进行军事推演,网民可以足不出户游览故宫博物馆等名胜古迹等。

而虚拟现实技术最重要的一部分内容就是三维图形编程。

当前,三维图形编程工具中最为突出的是SGI公司的OpenGL(Open Graphics Language,开放式的图形语言),它已经成为一个工业标准的计算机三维图形软件开发接口,并广泛应用于游戏开发、建筑、产品设计、医学、地球科学、流体力学等领域。

值得一提的是,虽然微软有自己的三维编程开发工具DirectX,但它也提供OpenGL图形标准,因此,OpenGL可以在微机中广泛应用。

目前,OpenGL在国内外都掀起了热潮,但国内对这一领域介绍的资料并不是很多,特别是有志于在图形图像方面进行深入研究的读者朋友,常常苦于不掌握OpenGL编程接口技术,无法向纵深领域扩展。

为了开启三维图形编程这扇神秘大门,本讲座在结合OpenGL 有关理论知识的基础上,着重介绍Visual C++6.0开发环境中的编程实现,由于水平有限,本讲座可能无法面面俱到,存在一些疏漏,但相信它可以将开启"神秘大门"的钥匙交给读者朋友们。

一、OpenGL的特点及功能OpenGL是用于开发简捷的交互式二维和三维图形应用程序的最佳环境,任何高性能的图形应用程序,从3D动画、CAD辅助设计到可视化访真,都可以利用OpenGL高质量、高性能的特点。

OpenGL自1992年出现以来,逐渐发展完善,已成为一个唯一开放的,独立于应用平台的图形标准,一个典型的OpenGL应用程序可以在任何平台上运行--只需要使用目标系统的OpenGL库重新编译一下。

(计算机图形学)4.OpenGL编程基础

(计算机图形学)4.OpenGL编程基础

绿色成分(G) 0.0 0.0 1.0 1.0 0.0 0.0 1.0 0.25 0.75 0.40
0.625 0.04 0.40 1.0
蓝色成分(B) 0.0 0.0 0.0 0.0 1.0 1.0 1.0 0.25 0.75 0.12 0.12 0.70 0.70 1.0
16
OpenGL程序实例——VC窗口绘制
32位浮点数 64位浮点数
定义为C类型 C字面值后缀
signed char
B
short
SLeabharlann longLfloat
F
double
D
8位无符号整数 unsigned char
Ub
16位无符号整数 unsigned short
Us
32位无符号整数 unsigned long
Ui
12
OpenGL程序实例——头文件包含
利用OpenGL实现图形绘制,首先要引入 OpenGL核心库以及其他需要使用的库的头文 件。
GLUT保证了gl.h和glu.h被正确包含。
#include <gl/glut.h> #include <windows.h>
13
OpenGL程序实例——GLUT窗口管理
初始化( glutInit ) 创建窗口( glutCreateWindow) 设定窗口的显示模式( glutInitDisplayMode) 指定窗口的位置和大小(
7
OpenGL的绘制流程——流水线
OpenGL命令将被放在一个命令缓冲区中,这样 命令缓冲区中包含了大量的命令、顶点数据和 纹理数据。当缓冲区被清空时,缓冲区中的命 令和数据都将传递给流水线的下一个阶段。
调用OpenGL API函数

OpenGL入门教程(精)

OpenGL入门教程(精)

4、把解压得到的 glut.dll 和 glut32.dll 放到操作系统目录下面的 system32 文件夹内。(典型的位置为: C:\Windows\Sy st em32) 第三步,建立一个 OpenGL 工程 这里以 VisualStudio2005 为例。 选择 File->New->Project,然后选择 Win32 Console Application,选择一个名字,然后按 OK。 在谈出的对话框左边点 Application Settings,找到 Empty project 并勾上,选择 Finish。 然后向该工程添加一个代码文件,取名为“OpenGL.c”,注意用.c 来作为文件结尾。 搞定了,就跟平时的工程没什么两样的。 第一个 OpenGL 程序
在 glutDisplayFunc 函数中,我们设置了“当需要画图时,请调用 myDisplay 函数”。于是 myDisplay 函数就 用来画图。观察 myDisplay 中的三个函数调用,发现它们都以 gl 开头。这种以 gl 开头的函数都是 OpenGL 的标准函数,下面对用到的函数进行介绍。 1、glClear,清除。GL_COLOR_BUFFER_BIT 表示清除颜色,glClear 函数还可以清除其它的东西,但这里 不作介绍。 2、glR ect f,画一个矩形。四个参数分别表示了位于对角线上的两个点的横、纵坐标。 3、glFlush,保证前面的 OpenGL 命令立即执行(而不是让它们在缓冲区中等待)。其作用跟 fflush(stdout) 类似。
OpenGL 入门教程
1.第一课:
说起编程作图,大概还有很多人想起 TC 的#include < graphics.h>吧? 但是各位是否想过,那些画面绚丽的 PC 游戏是如何编写出来的?就靠 TC 那可怜的 640*480 分辨率、16 色来做吗?显然是不行的。

第二章 OpenGL的二维编程(计算机图形学)

第二章 OpenGL的二维编程(计算机图形学)

2.2 GLUT
Opengl包含了许多渲染函数,但是它并没有
包含打开窗口或者从键盘或鼠标读取事件的 函数。所以GLUT的使用能够使Opengl得以 完整实现。 另外, Opengl绘图函数仅限于生成简单的几 何图元(点、直线、多边形),GLUT还包含 了一些函数,用于创建更复杂的三维物体。 GLUT是学习Opengl的一个非常好的起点。
程序清单1.1:在窗口内绘制一个矩形 //GLRect.c #include <windows.h> #include <gl/glut.h> #include<gl/gl.h> #include<gl/glu.h> // 函数RenderScene用于在窗口中绘制需要的图形 void RenderScene(void) { //用当前清除色清除颜色缓冲区,即设定窗口的背景色 glClear(GL_COLOR_BUFFER_BIT); //设置当前绘图使用的RGB颜色 glColor3f(1.0f, 0.0f, 0.0f); //使用当前颜色绘制一个填充的矩形 glRectf(100.0f, 150.0f, 150.0f, 100.0f); //刷新OpenGL命令队列 glFlush(); }
(1)跨平台特性 OpenGL与硬件、窗口和操作系统是相互独立的。 为了构成一个完整功能的图形处理系统,其设计实现 共分 5 层:图形硬件、操作系统、窗口系统、 OpenGL和应用软件。 因而, OpenGL可以集成到各种标准窗口和操作 系统中。例如,操作系统包括UNIX,Windows NT, Windows 95/98, DOS等;窗口系统包括X Windows, Microsoft Windows等。
7/3/2012 12
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

OpenGL图形编程入门
一、实验目的
1、了解和掌握OpenGL的安装。

2、掌握一个简单的基于OpenGL的C++程序结构。

3、掌握OpenGL中若干基本图形的绘制。

二、实验环境
硬件要求:
PC机,主流配置,最好为独立显卡,显存512M以上。

软件环境:
操作系统:Windows XP。

语言开发工具:VC6.0。

三、实验内容
1、建立一个工程文件,并运行样本程序my first program.cpp,观看结果。

(1)启动Microsoft Visual studio 6.0,在菜单栏中点击“文件”选项,选择“新建”“项目”。

如图1-1所示:
(2)在新建项目的窗口中选择“Win32控制台应用程序”,然后输入项目名称,选择项目的保存位置(或者使用默认保存路径),单击“确定”。

如图1-2所示:
(3)在Win32应用程序向导的窗口中,可以直接单击“完成”,如图1-3所示,创建一个空项目
(4)启动Microsoft Visual studio 6.0,在菜单栏中点击“文件”选项,选择“新建”“源文件”。

如图1-5所示。

(5)在新的窗口中选择“C++ source File”,然后输入文件名称,单击OK 完成源文件创建。

(6)在工程文件中输入样本程序,单击启动调试按钮,观察运行结果。

样本程序:my first program.cpp
#include <glut.h>
void display(void)
{
glClear(GL_COLOR_BUFFER_BIT); //刷新颜色缓冲区
glFlush(); //用于刷新命令队列和缓冲区,使所有尚未被执行的
OpenGL命令得到执行
}
void main(int argc, char** argv)
{
glutInit(&argc, argv); //初始化GLUT库
glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB); //设置显示模式 glutCreateWindow("hello"); //创建窗口,标题为“hello”
glutDisplayFunc(display); //用于绘制当前窗口
glutMainLoop(); //表示开始运行程序,用于程序的结尾
}
运行结果:
创建一个名称是“hello”的窗口。

如图1-7所示。

2、认真阅读样本程序,理解每个函数的作用,并修改窗口标题,显示为“我的
第一个OpenGL程序”。

运行结果:如图1-8所示。

图1-7 图1-8
3、窗口的设置。

在默认情况下,窗口的位置出现在屏幕的左上角,默认大小为300*300。

要求:
修改窗口大小为其他尺寸。

参考函数:
glutInitWindowPosition(int x, int y);//为窗口指定初始位置,窗口左
上角在屏幕上的位置为(x,y) glutInitWindowSize(int width, int height); //设置窗口大小
4、背景色的设置。

在默认情况下背景色是黑色。

要求:
(1)将窗口背景设置为白色,如图1-9所示。

(2)将窗口背景设置为其他颜色,如图1-10所示。

参考函数:
glClearColor(r,g,b,alpha);//设置背景颜色,此函数放在display()中,
并且放在glClear(GL_COLOR_BUFFER_BIT);
语句的前面。

其中r,g,b取值范围是[0,1],可以是浮点数。

例如glColor3f(0,0,0)为黑色,glColor3f(1,1,1)为白色,其他颜色应该如何设置?
图1-9 图1-10
5、基本图形绘制。

参考函数:
//画矩形,x1,y1和x2,y2为矩形对角线顶点坐标
glRectf(x1,y1,x2,y2);
//画线,x1,y1和x2,y2分别为直线段端点坐标
glBegin(GL_LINES);
glVertex2f(x1,y1);
glVertex2f(x2,y2);
glEnd();
//画三角,x1,y1,x2,y2和x3,y3为三角形顶点坐标
glBegin(GL_TRIANGLES);
glVertex2f(x1,y1);
glVertex2f(x2,y2);
glVertex2f(x3,y3);
glEnd();
(1)在display绘图函数的glClear(GL_COLOR_BUFFER_BIT);语句后面增加glRectf(0,0,1,1);运行程序查看效果,如图1-11所示。

图1-11 图1-12
(2)修改矩形的对角坐标,看看什么变化和问题。

如图1-12所示。

(3)根据给出的函数,试画出直线和三角形等基本图形。

如图1-13和图1-14。

图1-13 图1-14
6、绘图色的设置。

(1)将绘制的图形修改成红色。

如图1-15所示。

(2)将绘制的不同基本图元设为不同的颜色。

如图1-16所示。

参考函数:
glColor3f(r,g,b); //设置绘图色r,g,b,取值范围:[0,1],可以为浮点数
图1-15 图1-16。

相关文档
最新文档