实验1 OpenGL中的二维编程

合集下载

实验一 OPENGL中的二维编程

实验一 OPENGL中的二维编程

实验一OPENGL中的二维编程姓名叶传军学号 E11414103 得分一.实验题目1练习基本的openGL编程方法。

(1)配置openGL,能在VC下通过编译。

(2)阅读并运行simple.c,熟悉最简单的openGL程序结构。

(3)阅读并运行改进的simple2.c,掌握openGL程序的通用结构。

给simple2.c中的函数加注释。

可尝试做如下修改:(a)改变窗口的位置,尺寸,标题;(b)改变窗口背景色和矩形颜色;(c)改变矩形的尺寸和其在窗口中的位置,还可以只显示矩形的一部分(通过设置正投影参数和矩形四个顶点的坐标来完成);2发挥想象,编程实现在窗口中绘制若干图形及设置它们的属性,并回答问题:(1)绘制若干个点,分别设置每个点的颜色和大小。

思考题1:glPointSize()可以放在glBegin()和glEnd()函数对之间吗?(2)绘制若干条直线段。

设置线段的颜色,线型和线宽。

思考题1:以下命令会显示什么样的线段?glEnable(GL_LINE_STIPPLE);glColor3f(0.0, 1.0, 0.0);glLineWidth(2.0);glLineStipple(3, 0xcccc);glDisable(GL_LINE_STIPPLE);思考题2:以下命令会显示什么样的线段?glShadeModel(GL_SMOOTH);glBegin(GL_LINES);glColor3f(1.0, 0.0, 0.0);glVertex2f(0.0, 0.5);glColor3f(0.0, 0.0, 1.0);glVertex2f(0.5, -0.5);glEnd();将glShadeModel(GL_SMOOTH)改为glShadeModel(GL_FLAT),其余命令不变,结果又会如何?(3)绘制若干个多边形。

设置多边形的颜色,显示模式,隐藏某些边。

思考题1:以下命令会显示什么样的多边形?glShadeModel(GL_SMOOTH);glBegin(GL_POLYGON);glColor3f(1.0, 0.0, 0.0);glVertex2f(-0.5, -0.5);glColor3f(0.0, 1.0, 0.0);glVertex2f(-0.5, 0.5);glColor3f(0.0, 0.0, 1.0);glVertex2f(0.5, 0.5);glColor3f(1.0, 1.0, 0.0);glVertex2f(0.5, -0.5);glEnd();将glShadeModel(GL_SMOOTH)改为glShadeModel(GL_FLAT),其余命令不变,结果又会如何?将glBegin(GL_POLYGON)改为glBegin(GL_QUADS),分别尝试在SMOOTH和FLAT模式下的结果。

OpenGL编程.ppt

OpenGL编程.ppt
GL_POLYGON 通过一系列顶点定义一个多边形
OpenGL编程 Ls
17
图元3 (填充)多边形2
void display(void)
{
glClear(GL_COLOR_BUFFER_BIT);
glBegin(GL_TRIANGLES);
glVertex2f(-0.6, -0.3);
glVertex2f(-0.4, 0.3);
16
图元3 (填充)多边形1
void display(void) {
glClear(GL_COLOR_BUFFER_BIT); glBegin(GL_POLYGON);
glVertex2f(-0.5, -0.5); glVertex2f(-0.5, 0.5); glVertex2f(0.5, 0.5); glVertex2f(0.5, -0.5); glEnd(); glFlush(); }
指定窗口类型,单缓存,RGB颜色,用逻辑运算OR 组合。
glutInitWindowSize(600,600); 指定窗口在屏幕上的初始大小。
glutInitWindowPosition(200,200); 指定窗口在屏幕上的初始位置。
glutCreateWindow(“Simple1.C"); glutDisplayFunc(display); glutMainLoop(); }
OpenGL编程
河南科技大学电信学院 主讲:刘刚
OpenGL编程 Ls
1
Chap2 OpenGL中的二维编程
OpenGL编程 Ls
2
#include <GL/glut.h>
void display(void) {
glClear(GL_COLOR_BUFFER_BIT); glBegin(GL_POLYGON);

用OpenGL实现二维图像的三维显示

用OpenGL实现二维图像的三维显示
三 角形 面 片 生成 二 维 图像 的 三 维 平 滑 曲 面 ,更 全 面地 展 J - 图像 中蕴 含 的 信 L: 维
息。
关键 词
纹理 映射 ,光 照 ,三 角形 面 片
在数字图像处 理领域 ,有时需要从三维的角度观察图像 , 即二维图像的三维显示 ,可以用 于图像识别和 图像检索 。如果 图像的 内容 比较简单 ,如二维 图像 ,可 以不进行处理 ,直接显 示其三维 图像 ;反之 ,如果 图像 的内容 比较复杂 ,在显示其三 维图像 时 ,会 出现尖锐 的凸起和 凹陷 ,所以需要对图像 做一些 平滑处理 ,最 主要 的平滑处理有 :滤波 ,插值等。
量 、蓝 色 分 量 和 绿 色分 量 ;也 可 以取 色 调 、饱 和度 等 。 图 1 四个 相 邻 像 素 组 成 的 正 方 形
二、三维场景
调用 O eG pn L库函数 ,启用光照 ,设 置材质属性 ,这样显 示 的三 维图像 才具 有 真实感 。使 用 O eG pn L绘 制小 三角 形面 片,多个小三角形 面片组成 曲面 ,达 到二维 图像 的三维显示 , 还 可 以通 过 O eG pn L的模 型 视图变 换从 不 同角 度观 看三 维图 像 ,除 了用二维图像 本身对 生成 的小三角形面 片进行纹理映射
C X+1 Y+1 z) ( , ,一 3 D( X+1 Y Z) , ,一 4
对于 △A C B ,盲=面 × ,其 中 :A 面 — B: ( ,一1z一 0 ,

维普资讯 R B ^ 胁 HC ^ P 口 R 啊… 一 一 … - - ……一 J … 。 … ……¨ …… H _ ………¨ ……… … ” … ……
维普资讯
… … … … … … … … … … … 一 … ¨ … … … … … … … …

实验1,opengl的基本语法实验报告心得体会

实验1,opengl的基本语法实验报告心得体会

实验1,opengl的基本语法实验报告心得体会篇一:图形学实验报告openGL的基本语法《计算机图形学基础》实验1 OpenGL的基本语法一、实验目的及要求1. 了解OpenGL的主要功能2. 了解OpenGL的绘制流程3. 掌握OpenGL的基本语法4. 通过以上内容,掌握 OpenGL的编程框架,实现简单的图形绘制二、实验环境主要是软件开发环境:VC三、实验内容OpenGL绘制矩形的简单例子。

四、实验结果五、程序代码#includevoid Initial(void){}void Display(void){glClear(GL_COLOR_BUFFER_BIT); //用当前背景色填充窗口 glColor3f(, , );//设置当前的绘图颜色为红色glRectf(, , , ); //绘制一个矩形glFlush();//处理所有的OpenGL程序}int main(int argc, char* argv[]){glutInit(&argc, argv); glutInitDisplayMo(转载于: 小龙文档网:实验1,opengl的基本语法实验报告心得体会)de(GLUT_SINGLE | GLUT_RGB); //初始化glClearColor(, , , ); //设置窗口背景颜色为白色glMatrixMode(GL_PROJECTION);//设置投影参数gluOrtho2D(,,,); 窗口的显示模式glutInitWindowSize(400,300); //设置窗口的尺寸 glutInitWindowPosition(100,120); //设置窗口的位置}glutCreateWindow("矩形"); //创建一个名为矩形的窗口 glutDisplayFunc(Display); //设置当前窗口的显示回调函数Initial(); //完成窗口初始化glutMainLoop(); //启动主GLUT事件处理循环 return 0;六、心得体会颜色、窗口尺寸、位置等都可以用代码来改。

OpenGL中的二维编程

OpenGL中的二维编程

GLUT默认值
glutDisplayMode
GLUT_SNGLE单缓冲
glutInitWindowSize glutInitWindowPosition
OpenGL中的颜色
❖ RGB或RGBA ❖ 0 ~ 1, 也可以用 0 ~ 255来表示 ❖ (1.0, 0.0, 0.0) 红色 ❖ A -> alpha表示不透明度 ❖ 1 不透明
视口
❖ viewport是指视窗的大小,就好像我们的眼睛 ❖ glViewport
❖ 视景体越大,里面的物体显得越小
改变参数 -> example
一个点的坐标是(0,0,0)就是在平行六面体的中间, 也就是在viewport的中间;
点的坐标是(-5.0,-5.0,0),是在平行六面体的左下 角,也就是在viewport的左下角。
gluOrtho2D
❖ GLU库函数
void gluOrtho2D( GLdouble left, GLdouble right, GLdouble bottom, GLdouble top );

GLfloat vtex4[] = {0.5, -0.5};

glBegin(GL_POLYGON);

glVertex2fv(vtex1);

glVertex2fv(vtex2);

glVertex2fv(vtex3);

glVertex2fv(vtex4);

glEnd();
绘制
❖ glBegin(GL_POLYGON);
颜色的设置
❖ glColor*() ❖ glClearColor() ❖ 出现v表示接受的参数为数组 ❖ glClearColor只接受RGBA, float型 ❖ GLclampf -> float

openGL实现二维图形和三维图形

openGL实现二维图形和三维图形

openGL实现⼆维图形和三维图形 openGL是⼀个强⼤的底层图形库,其命令最初的时候使⽤C语⾔实现的。

openGL定义了⼀个图形程序接⼝,常⽤于制作处理三维图像,功能强⼤,调⽤⽅便,在图像处理⼗分受欢迎。

实现图形主要使⽤的是openGL的⼀个⼯具包:GLUT。

GLUT (pronounced like the glut in gluttony) is the OpenGL Utility Toolkit, a window system independent toolkit for writing OpenGL programs. It implements a simple windowing application programming interface (API) for OpenGL. GLUT is designed for constructing small to medium sized OpenGL programs. While GLUT is well-suited to learningOpenGL and developing simple OpenGL applications, GLUT is not a full-featured toolkit so large applications requiringsophisticated user interfaces are better off using native window system toolkits like Motif. GLUT is simple, easy, and small. GLUT对于⼤型的项⽬来说可能功能不全,它主要针对⼀些中⼩型的openGL项⽬⽽设计。

1.实现⼆维图像相对简单些,直接下代码:#include <GL/glut.h>void Rectangle(void) {//gl开头的函数为openGL的标准函数//(使⽤当前缓冲区的值来)清除指定的缓冲区glClear(GL_COLOR_BUFFER_BIT); //画矩形//glRectf(-0.5f, -0.5f, 0.5f, 0.5f);//画直线glBegin(GL_LINES);glVertex2f(0.5f, 0.5f);glVertex2f(-0.5f, -0.5f);glEnd();//刷新缓冲,保证绘图命令能被执⾏glFlush();}int main(int argc, char *argv[]) {//初始化GLUT libraryglutInit(&argc, argv);//对窗⼝的⼤⼩进⾏初始化glutInitWindowSize(300, 300);// 设置窗⼝出现的位置//glutInitWindowPosition(int x, int y);//初始化程序展⽰模式glutInitDisplayMode(GLUT_RGBA);glutCreateWindow("project of openGL");//win: 指定⼦窗⼝的⽗窗⼝//glutCreateSubWindow(int win, int x, int y, int width, int height);//为当前窗⼝设置函数回调,⽤于画图glutDisplayFunc(&Rectangle);//进⾏glut事件循环,否则看不到图形效果(⼀闪⽽过)glutMainLoop();return 0;} 实现效果: 也可以在窗⼝中画⼀个圆:#include <math.h>GLfloat r = 0.5f;GLfloat PI = 3.141592653f;int pre = 30;glBegin(GL_POLYGON);//画多边形for (int i = 0; i < pre; i++) {glVertex2f(r * cos(2 * PI*i / pre), r * sin(2 * PI*i / pre));}glEnd(); 实际上这个圆并不是圆,⽽是多边形的近似。

实验一OpenGL图形编程入门

实验一OpenGL图形编程入门

实验⼀OpenGL图形编程⼊门实验⼀ OpenGL图形编程⼊门三、实验内容1、建⽴⼀个⼯程⽂件,并运⾏样本程序my first program.cpp,观看结果。

(6)在⼯程⽂件中输⼊样本程序,单击启动调试按钮,观察运⾏结果。

样本程序:my first program.cpp#includevoid 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程序”。

3、窗⼝的设置。

在默认情况下,窗⼝的位置出现在屏幕的左上⾓,默认⼤⼩为300*300。

要求:修改窗⼝⼤⼩为其他尺⼨。

参考函数:glutInitWindowPosition(int x, int y);//为窗⼝指定初始位置,窗⼝左上⾓在屏幕上的位置为(x,y) glutInitWindowSize(int width, int height); //设置窗⼝⼤⼩4、背景⾊的设置。

在默认情况下背景⾊是⿊⾊。

要求:(1)将窗⼝背景设置为⽩⾊(2)将窗⼝背景设置为其他颜⾊参考函数:glClearColor(r,g,b,alpha);//设置背景颜⾊,此函数放在display()中,并且放在glClear(GL_COLOR_BUFFER_BIT);语句的前⾯。

浅谈怎样使用OpenGL绘制简单二维图形

浅谈怎样使用OpenGL绘制简单二维图形

浅谈怎样使用OpenGL绘制简单二维图形浅谈怎样使用OpenGL绘制简单二维图形摘要:在上一章节中我们讲解了OpenGL的基本原理,以及怎样在MFC中配置OpenGL 绘图环境,而在这一章节我开始正式绘图(注意上一章节的内容严格的来讲是属于window 编程,而不属于OpenGL)。

我们先从一个简单例子开始讲解:绘制一个在视图中央,长宽各为视图长宽一半的矩形。

1.1 视图设置与GDI二维函数库不同,OpenGL是一套三维绘图函数库。

使用GDI时,点的坐标对应的就是像素点坐标(已窗口左上角为(0,0)点),而OpenGL绘图时使用的是顶点坐标,要通过一系列转换最终换算成窗口的像素坐标,这种转换就是视图的设置,视图设置将在第三章详细讲解,本章只使用最简单的一种视图设置——2D正投影。

(视图设置的详细内容将在下一章讲解)设置2D正投影所需的函数如下:glMatrixMode(GL_PROJECTION);将投影矩阵设置为当前矩阵(后续设置矩阵的函数都是对投影矩阵起作用)glLoadIdentity();将当前矩阵设置为单位矩阵gluOrtho2D(left,right,bottom,top);创建一个把二维坐标投影到屏幕上的矩阵,并把当前矩阵与它相乘。

裁剪区域为矩形,它的左下坐标为(left,bottom),右上坐标为(right,top)。

glViewport(x,y,width,height);在窗口中定义一个像素矩形,最终的图像将映射到这个矩形中。

(x,y)参数指定了视口的左下角,width和height表示这个视口矩形的宽度和高度。

在默认情况下,视口的初始值是(0,0,winWidth,winHeight),其中winWidth和winHeight为对应窗口的大小。

在2D正投影模式下,OpenGL坐标于窗口显示的坐标对应逻辑如图 1 窗口映射关系所示:图 1 窗口映射关系1.2 绘制几何图元设置完视图和投影模式之后,我们便可以开始绘图了,但在这之前还要注意清空视图,防止绘图效果累加,比如要画一个移动圆形,如果不将前一帧的绘图擦除,我们将看到的是一系列的圆形,而不是一个移动的圆形,这和使用GDI在每次绘图都要用背景将上一次的绘图效果覆盖一样。

OpenGL二维应用举例

OpenGL二维应用举例
文 字 背景 则 是半 透 明 的。
值一 。在本 例中背景 、 边框 、 文字 、 文字背景的 dh  ̄pa值分别
设 为 0 O 、 . f1 O 、 . f . f1 O 、 . f0 5 。
界面的构建首先需要利用平 面绘图工具制 作如 图 2所
示 的按 钮 位 图 , 不 同 的颜 色 绘 制按 钮 的 背 景 、 框 、 用 边 文字 和
最后就可以在界面绘制部分画 出上述 的按钮 了。调用 gu r cD ) l t 2 ( 函数 将 当 前投 影模 式 设 为 正 交 投 影 ; 用 O h 调
gE al G — L N 3 函数 使 能  ̄p a 合 ; 用 g l d lnbe L B E T ) ( ah混 d 调 le — Bn

Opn L . eG 20以上 版本 则 无 此限 制 。
指 的工 业标 准 。 众 所 周 知 , pn- 一 个 三 维 图 形 应 用 程 序 接 口 , O eCL是 用
于在 计算 机 二维 的显 示 界 面上 进 行 三 维 事物 的模 拟 。 同 时 , O eG pn L也包 含了大 量 的 二 维绘 图 指 令 , 论 是 作 为 应 用 程 无 序独 立 的组 成 部 分还 是 对 三维 构 图 的 补 充 , 二维 图形 功 能 均 发挥 着 不 可 替 代 的 作 用 。本 文 针 对 O eGL二 维 绘 图 功 能 pn 的一 些 主 要应 用 场合 , 以举 例 的方 式 分 别 加 以论 述 。程 序 运 行 的操 作 系 统 为 W i o sX rf s nl P , 译 环 境 为 n w P Poe i a S 2 编 d so
同的运行机理 , 二者不能在同一个窗口中执行绘 图任务。那

OpenGL实验指导

OpenGL实验指导

计算机图形学实验指导书课程名称: 计算机图形学基础英文名称: Computer Graphics 课程性质: 限选编写人: 孔繁茹2010年9月1日计算机学院阅读说明● 未加标注的为参考实验 ● 标有☆的为必做实验 ● 标有★的为选做实验实验要求● 每个小组 ≤ 4人,需要完成以下任务⏹ 所有必做实验 (40%) 8 * 5分 ⏹ 2项选做实验 (20%) 2 * 10分 ⏹ 1项综合实验 (40%) 1 * 40分Part 1 预备知识实验1.1 环境设置[参考程序] demo.c 图 1.1.1 一、实验目的熟悉VC 编程环境, 配置OpenGL 图形环境 二、实验内容1.OpenGL 环境设置将OpenGL 所需函数库和头文件复制到指定目录.也可以通过批处理文件的方式, 将下面四行存入一文本文件, 改名为set.bat , 然后双击set.bat 运行. copy glut.h "C:\Program Files\Microsoft Visual Studio\VC98\Include\GL" copy glut32.lib "C:\Program Files\Microsoft Visual Studio\VC98\Lib" copy glut32.dll "C:\WINDOWS\system32" pause注意: 如果VC 安装在D 盘或其他盘, 应修改相应路径 2.编译运行demo.c, 查看环境是否配置成功Part 2 OpenGL 编程基础图 1.1.1实验2.1 OpenGL 编程基础[参考程序]hello.c 图2.1.1 chap2-1.cpp 图2.1.2一、实验目的熟悉OpenGL 编程框架、基本函数、几何原语 二、实验内容1. 运行hello.c, 查看运行结果, 并完成以下练习1) 改变背景颜色 2) 改变图形颜色 3) 改变窗口大小 4) 改变窗口位置2. 用OpenGL 几何原语绘制点, 直线, 多边形, 三角形带等基本图形. OpenGL 编程基础可参考附录。

第二章 OpenGL的二维编程

第二章 OpenGL的二维编程

glutInit(int *argc,char **argv)
对GLUT进行初始化,并处理所有的命令行参 数。glutInit()应该在调it()接受来自 main()函数的参数,程序可以具体实现相关 的方式来使用这些参数。
glutInitDisplayMode(unsigned int mode)
2.2.2 GLUT显示回调函数
glutDisplayFunc(void(*func)(void))----每当 GLUT确定一个窗口的内容需要重新显示时, 通过glutDisplayFunc()注册的那个回调函数 就会被执行。因此应该把重绘场景所需要的 所有代码都放在这个显示回调函数里。 如果程序修改了窗口的内容,有时候可能需 要调用glutPostRedisplay(),这个函数会指示 glutMainLoop()调用已注册的显示回调函数。
OpenGL允许同时清除多个缓冲区
glClear(GL_COLOR_BUFFER_BIT |GL_DEPTH_BUFFER_BIT )----执行速度快
2.3.2 指定颜色
物体颜色和形状无关,一般而言,程序员首 先设置颜色和颜色方案,然后再绘制物体。 为了设置颜色,可以使用glColor3f()函数。这 个函数接受3个参数,都是0.0~1.0之间的浮 点数,分别表示颜色的红、绿、蓝色成分。 0.0表示不使用这种成分,1.0表示最大限度 的使用这种成分。
2.2 GLUT
Opengl包含了许多渲染函数,但是它并没有 包含打开窗口或者从键盘或鼠标读取事件的 函数。所以GLUT的使用能够使Opengl得以 完整实现。 另外, Opengl绘图函数仅限于生成简单的几 何图元(点、直线、多边形),GLUT还包含 了一些函数,用于创建更复杂的三维物体。 GLUT是学习Opengl的一个非常好的起点。

第二章 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 OpenGL图形编程入门

实验1 OpenGL图形编程入门
4、背景色的设置。 在默认情况下背景色是黑色。 要求: (1)将窗口背景设置为白色,如图 1-6 所示。 (2)将窗口背景设置为其他颜色,如图 1-7 所示。 参考函数: glClearColor(r,g,b,alpha);//设置背景颜色,此函数放在 display()中, 并且放在 glClear(GL_COLOR_BUFFER_BIT); 语句的前面。 其中 r,g,b 取值范围是[0,1],可以是浮点数,alpha 取值范围为 0~1,在这里其值不
glClearColor(0.0f, 0.0f, 0.0f, 1.0f); //设置清屏颜色 glClear(GL_COLOR_BUFFER_BIT); //刷新颜色缓冲区;
glFlush(); 行; }

//用于刷新命令队列和缓冲区,使所有尚未被执行的OpenGL命令得到执
int APIENTRY _tWinMain(HINSTANCE hInstance,
glutInit(&argc, argv); //初始化GLUT库; glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB); //设置显示模式;(缓冲,颜色 类型) glutInitWindowSize(500, 500); //绘图窗口大小 glutInitWindowPosition(1024 / 2 - 250, 768 / 2 - 250); //窗口左上角在屏幕的 位置 glutCreateWindow("hello"); //创建窗口,标题为“hello”; glutDisplayFunc(display); //用于绘制当前窗口; glutMainLoop(); //表示开始运行程序,用于程序的结尾;
实验一 OpenGL 图形编程入门

使用OpenGL实现2D和3D图形

使用OpenGL实现2D和3D图形

使用OpenGL实现2D和3D图形
OpenGL是一种开放的、跨平台的3D图形编程接口,可以利
用其实现2D和3D图形效果。

它采用C语言语法,基于窗口
系统,其核心语句非常简单,强大的可扩展性,使得OpenGL
成为许多图形应用的最佳选择。

OpenGL提供几乎所有2D和
3D图形效果,如点、线、形状、贴图、细节、动画等。

若要使用OpenGL实现2D图形,首先需要设置和初始化OpenGL环境,然后调用OpenGL相关的函数定义和绘制2D
的场景图形,并设定颜色等信息进行渲染显示,最后对OpenGL环境进行清理。

实现3D图形的基本步骤和2D图形基本一致,但需要添加更
多的参数,如照相机位置、材质、光照、视角等。

此外,需要调用OpenGL上下文中定义的几何操作,并根据这些操作生成
3D模型数据,再将它们放入OpenGL环境中进行渲染和显示。

OpenGL提供了大量复杂的操作接口,可以方便快捷地实现
2D和3D图形,它使许多图形应用能够更加流畅,不论是PC
端还是移动端,都能够轻松实现精美的3D图形效果。

实验OpenGL基本图形绘制

实验OpenGL基本图形绘制

实验一OpenGL基本图形绘制一、实验目的和要求:1. 了解VC++环境下,OpenGL图形绘制的程序结构;2. 通过编程实现简单二维图形的绘制;3. 掌握理解简单的OpenGL程序结构;掌握OpenGL提供的基本图形函数,尤其是生成点、线、面的函数4. 掌握图形显示原理。

二、实验内容:1、OpenGL在VC++下的安装和配置2、读懂给定的示例程序,使用Visual C++ 6.0和OpenGL编写几个简单图形的绘制程序。

3、建议有能力的学生进一步学习OpenGL的复杂功能创建效果更好的三维图形;三、实验步骤:1、初步了解OpenGL的功能以及语法特点;2、下载glut包,复制 glut32.dll到winnt/system32文件夹下,复制glut32.lib到vc98/lib文件夹下,复制glut.h到vc98/include/gl文件夹下;3、创建VC工程:选择菜单File中的New选项,弹出一个分页的对话框,选中页Projects中的Win32 Console Application项,然后填入你自己的Project name,如Test,回车即可。

VC为你创建一个工作区(WorkSpace),你的项目Test就放在这个工作区里;4、为项目添加文件:为了使用OpenGL,我们需要在项目中加入三个相关的Lib文件:glu32.lib、glut32.lib、opengl32.lib,这三个文件位于VC安装目录下的lib目录(如c:\program files\ devstudio\vc\lib)中。

选中菜单Project->Add ToProject->Files项(或用鼠标右键),把这三个文件加入项目,在FileView中会有显示。

这三个文件请务必加入,否则编译时会出错。

或者将这三个文件名添加到Project->Setting->Link-> Object /library Modules 即可。

第二章 OpenGL中的二维编程

第二章 OpenGL中的二维编程

回调函数(callback function)
回调函数:是响应某种事件而被调用的函 数,由程序员编写,通过GLUT注册函数进 行连接。 glutDisplayFunc(void (*func) void) //显示 回调函数是不带参数的函数
绘制图形(矩形)
点的指定
设定点的开始和结束
பைடு நூலகம்冲区
缓冲区:用于存储图像信息的存储区域。(通常 位于显卡内) 颜色(像素)缓冲区:用来存放一副图像的红绿蓝 成分的存储区域。--颜色缓存是构成帧缓存的多 种类型(深度缓存、模板缓存、积累缓存等)之 一 颜色缓冲区即被显示图像的内部存储位置,调用 glClear函数将从窗口中清除最后一次所绘制的图 形。
命令缓冲
在内部,OpenGL使用一条渲染流水线线性的处 理命令。OpenGL命令和语句常常等待在队列中, 直到OpenGL驱动程序同时处理几个“命令”。 这种设置提高了性能,因为硬件之间的通信从本 质上是比较缓慢的。与硬件通信一次同时传递多 个数据要比进行多次通信每次传递一个命令或指 令要快的多。
指定三维裁剪区域
视口
视口:窗口内部用于绘制裁剪区域的客户 区域。 通常视口被定义为整个窗口,其单位为像 素;也可将屏幕的某一部分作为视口。 定义视口的本质就是确定:将笛卡尔坐标 系下绘制的对象映射到物理屏幕像素坐标 的响应区域。
视口
投影
投影(projection):用来创建几何图形的3D 坐标将投影到2D坐标(窗口背景) 投影分类:
GLUT
平台相关的窗口操作库
glx:Linux平台下的x窗口系统 wgl:windows agl:Macintosh(Mac 苹果)
GLUT 函数
void glutInit(int * arg,char ** argv);

VISUAL STUDIO下OPENGL下编写代码生成二维图形的过程

VISUAL STUDIO下OPENGL下编写代码生成二维图形的过程

Visual Studio下OPENGL下编写代码生成二维图形的过程第一步:现在Windows系统的主流编译环境有Visual Studio,Broland C++Builder,Dev-C++等,它们都是支持OpenGL的。

但这里我们选择visual studio10.0作为学习OpenGL 的环境。

第二步:安装GULT。

这个文件不是OPENGL所必须的,但是安装了会于我们学习OPENGL 会更加便捷。

在未安装GULT的情况下,进行代码的编写,出现了语句错误的提示等问题。

其实安装GULT很简单。

把GULT.h放入到Visual Studio的VC下的incloud 的GL文件下。

将两个后缀为.lib的文件(gult.lib gult32.lib)放入到Visual Studio 下的LIB文件夹中(静态数据库)。

再将后缀为.dll的文件放入操作系统下的system32的文件夹内(动态数据库的重要链接位置)。

第三步:打开Visual Studio,在文件目录下新建一个项目。

选择visual C++下的win32平台。

在下一步的操作中关掉应用程序向导中的预编译头。

完成。

第四步:将所要表现出来的二维图形代码,输入命令窗口,在调试目录下启动调试,来确认自己的命令是否正确。

最后输出一个如图的文件。

即完成。

这是此图形的代码:#include<GL/glut.h>void myDisplay(){glClear(GL_COLOR_BUFFER_BIT);glRectf(-0.5f,-0.5f,0.5f,0.5f);glFlush();}int main(int argc,char*argv[]){glutInit(&argc,argv);glutInitDisplayMode(GLUT_RGB|GLUT_SINGLE);glutInitWindowPosition(100,100);glutInitWindowSize(400,400);glutCreateWindow("第一个OpenGL程序");glutDisplayFunc(&myDisplay);glutMainLoop();return0;}王垚201107080112。

实验1__OpenGL基本图形绘制[整理版]

实验1__OpenGL基本图形绘制[整理版]

实验一OpenGL基本图形绘制一、实验目的和要求:1. 了解VC++环境下,OpenGL图形绘制的程序结构;2. 通过编程实现简单二维图形的绘制;3. 掌握理解简单的OpenGL程序结构;掌握OpenGL提供的基本图形函数,尤其是生成点、线、面的函数4. 掌握图形显示原理。

二、实验内容:1、OpenGL在VC++下的安装和配置2、读懂给定的示例程序,使用Visual C++ 6.0和OpenGL编写几个简单图形的绘制程序。

3、建议有能力的学生进一步学习OpenGL的复杂功能创建效果更好的三维图形;三、实验步骤:1、初步了解OpenGL的功能以及语法特点;2、下载glut包,复制 glut32.dll到winnt/system32文件夹下,复制glut32.lib到vc98/lib文件夹下,复制glut.h到vc98/include/gl文件夹下;3、创建VC工程:选择菜单File中的New选项,弹出一个分页的对话框,选中页Projects中的Win32 Console Application项,然后填入你自己的Project name,如Test,回车即可。

VC为你创建一个工作区(WorkSpace),你的项目Test就放在这个工作区里;4、为项目添加文件:为了使用OpenGL,我们需要在项目中加入三个相关的Lib文件:glu32.lib、glut32.lib、opengl32.lib,这三个文件位于VC安装目录下的lib目录(如c:\program files\ devstudio\vc\lib)中。

选中菜单Project->Add ToProject->Files项(或用鼠标右键),把这三个文件加入项目,在FileView中会有显示。

这三个文件请务必加入,否则编译时会出错。

或者将这三个文件名添加到Project->Setting->Link-> Object /library Modules 即可。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验1 OpenGL中的二维编程
【实验目的】
1.掌握基本的openGL编程方法。

2.掌握二维图形的显示方法。

【实验题目】
1. 练习基本的openGL编程方法。

(1)配置openGL,能在VC下通过编译。

(2)阅读并运行simple.c,熟悉最简单的openGL程序结构。

(3)阅读并运行改进的simple2.c,掌握openGL程序的通用结构。

给simple2.c 中的函数加注释。

可尝试做如下修改:
(a)改变窗口的位置,尺寸,标题;
(b)改变窗口背景色和矩形颜色;
(c)改变矩形的尺寸和其在窗口中的位置,还可以只显示矩形的一部分(通过设置正投影参数(glOrtho函数的参数)和矩形四个顶点的坐标来完成);
2. 发挥想象,编程实现在窗口中绘制若干图形及设置它们的属性,并回答问题:(1)绘制若干个点,分别设置每个点的颜色和大小。

思考题1:glPointSize()可以放在glBegin()和glEnd()函数对之间吗?
(2)绘制若干条直线段。

设置线段的颜色,线型和线宽。

思考题1:以下命令会显示什么样的线段?
glEnable(GL_LINE_STIPPLE);
glColor3f(0.0, 1.0, 0.0);
glLineWidth(2.0);
glLineStipple(3, 0xcccc);
glDisable(GL_LINE_STIPPLE);
思考题2:以下命令会显示什么样的线段?
glShadeModel(GL_SMOOTH);
glBegin(GL_LINES);
glColor3f(1.0, 0.0, 0.0);
glVertex2f(0.0, 0.5);
glColor3f(0.0, 0.0, 1.0);
glVertex2f(0.5, -0.5);
glEnd();
将glShadeModel(GL_SMOOTH)改为glShadeModel(GL_FLAT),其余命令不变,结果又会如何?
(3)绘制若干个多边形。

设置多边形的颜色,显示模式,隐藏某些边。

思考题1:以下命令会显示什么样的多边形?
glShadeModel(GL_SMOOTH);
glBegin(GL_POLYGON);
glColor3f(1.0, 0.0, 0.0);
glVertex2f(-0.5, -0.5);
glColor3f(0.0, 1.0, 0.0);
glVertex2f(-0.5, 0.5);
glColor3f(0.0, 0.0, 1.0);
glVertex2f(0.5, 0.5);
glColor3f(1.0, 1.0, 0.0);
glVertex2f(0.5, -0.5);
glEnd();
将glShadeModel(GL_SMOOTH)改为glShadeModel(GL_FLAT),其余命令不变,结果又会如何?
将glBegin(GL_POLYGON)改为glBegin(GL_QUADS),分别尝试在SMOOTH和FLAT 模式下的结果。

思考题2:以下程序段分别会显示什么样的多边形?
(a)
glPolygonMode( GL_FRONT_AND_BACK, GL_FILL);
glColor3f(1.0, 0.0, 0.0);
glBegin(GL_POLYGON);
glVertex2f(-0.5, -0.5);
glVertex2f(-0.5, 0.5);
glVertex2f(0.5, 0.5);
glVertex2f(0.5, -0.5);
glEnd();
(b)
glPolygonMode( GL_FRONT_AND_BACK, GL_LINE);
glColor3f(1.0, 1.0, 0.0);
glBegin(GL_POLYGON);
glVertex2f(-0.5, -0.5);
glVertex2f(-0.5, 0.5);
glVertex2f(0.5, 0.5);
glVertex2f(0.5, -0.5);
glEnd();
(c)
glPolygonMode( GL_FRONT_AND_BACK, GL_POINT);
glColor3f(1.0, 1.0, 0.0);
glBegin(GL_POLYGON);
glVertex2f(-0.5, -0.5);
glVertex2f(-0.5, 0.5);
glVertex2f(0.5, 0.5);
glVertex2f(0.5, -0.5);
glEnd();
思考题3:下面多边形的哪些边不可见?
glPolygonMode( GL_FRONT_AND_BACK, GL_LINE);
glColor3f(1.0, 1.0, 0.0);
glBegin(GL_POLYGON);
glVertex2f(-0.5, -0.5);
glEdgeFlag(GL_FALSE);
glVertex2f(-0.5, 0.5);
glEdgeFlag(GL_TRUE);
glVertex2f(0.5, 0.5);
glVertex2f(0.5, -0.5);
glEnd();
3.学会查文档,自学。

4公司某年度各月产量分别为:320,475,436,754,585,619,788,500,860,1000,800,930。

试绘制一年内产量按月的折线图,柱状图和饼图(可用三角法画圆)。

注意文本的位置。

参考图示如下:
月份较多,画饼图的时候可以按照季度来统计产量:
【说明】实验报告写题目1,2,4。

【参考资料】
[1] 教材2.5.3节,2.6.4节,5.8.1节,5.8.2节,5.8.3节(多边形的填充和法向量不用看),5.8.4节
[2] D. Hearn and M. P. Baker, Computer Graphics with OpenGL, 3rd Ed., 2004. 计算机图形学(第三版),电子工业出版社
2.9节,
3.1-3.4节,3.16节,3.21节,P131示例程序(第4题可参考这里的程序),
4.3.1节,4.7节,4.8节,4.14.2-4.14.4节。

相关文档
最新文档