实验1 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编程 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实现二维图像的三维显示
息。
关键 词
纹理 映射 ,光 照 ,三 角形 面 片
在数字图像处 理领域 ,有时需要从三维的角度观察图像 , 即二维图像的三维显示 ,可以用 于图像识别和 图像检索 。如果 图像的 内容 比较简单 ,如二维 图像 ,可 以不进行处理 ,直接显 示其三维 图像 ;反之 ,如果 图像 的内容 比较复杂 ,在显示其三 维图像 时 ,会 出现尖锐 的凸起和 凹陷 ,所以需要对图像 做一些 平滑处理 ,最 主要 的平滑处理有 :滤波 ,插值等。
量 、蓝 色 分 量 和 绿 色分 量 ;也 可 以取 色 调 、饱 和度 等 。 图 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的基本语法实验报告心得体会篇一:图形学实验报告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中的二维编程
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是⼀个强⼤的底层图形库,其命令最初的时候使⽤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图形编程⼊门三、实验内容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的基本原理,以及怎样在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二维应用举例
值一 。在本 例中背景 、 边框 、 文字 、 文字背景的 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实验指导
计算机图形学实验指导书课程名称: 计算机图形学基础英文名称: 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的二维编程
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的二维编程(计算机图形学)
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图形编程入门
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是一种开放的、跨平台的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基本图形绘制一、实验目的和要求: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中的二维编程
回调函数(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下编写代码生成二维图形的过程第一步:现在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基本图形绘制[整理版]
实验一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、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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节。