实验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(); 实际上这个圆并不是圆,⽽是多边形的近似。

实验二 二维基本图元的生成

实验二  二维基本图元的生成
xIncrement = float (dx) / float (steps);
yIncrement = float (dy) / float (steps);
setPixel (round (x), round (y));
for (k = 0; k < steps; k++) {
x += xIncrement;
}
注意:
(1)代码没有主函数及其它OpenGL的初始化函数,请用前面实验一中的代码进行添加,该函数在回调函数myDraw()中调用执行;
(2)代码中出现的
class scrPt {
public:
GLint x, y;
};
是C++中的类定义,对于没有学习过C++的读者,这里可看作是C语言中的一个结构体:
{
setPixel (xCenter + x, yCenter + y);
setPixel (xCenter - x, yCenter + y);
setPixel (xCenter + x, yCenter - y);
setPixel (xCenter - x, yCenter - y);
}
注意:
(1)代码没有主函数及其它OpenGL的初始化函数,请用前面实验一中的代码进行添加,该函数在回调函数myDraw()中调用执行;
*/
void ellipseMidpoint (int xCenter, int yCenter, int Rx, int Ry)
{
int Rx2 = Rx * Rx;
int Ry2 = Ry * Ry;
int twoRx2 = 2 * Rx2;

OpenGL图形编程1介绍(陈永强)

OpenGL图形编程1介绍(陈永强)

18
1.1OpenGL的主要功能
位图和图像处理
OpenGL 还提供了专门对位图和图象进行操作的 函数。
19
1.1OpenGL的主要功能
纹理映射
三维景物因缺少景物的具体细节而显得不够真实,为了更 加逼真地表现三维景物,OpenGL 提供了纹理映射的 功能。OpenGL 提供的一系列纹理映射函数使得开发 者可以十分方便地把真实图象贴到景物的多边形上,
32位整数 32位浮点数 64位浮点数
short
long float double
S
L F D
GLubyte,GLboolean
GLshort GLuint,GLenum,GLbitfield
位图字体以及把文本放在窗口的某一位置等这些函数把
Windows 和 OpenGL 揉合在一起。
34
1.4OpenGL基本语法
组成
Win32 API 函数库
这部分函数没有专用的前缀,主要用于处理像素 存储格式和双帧缓存。
35
1.4OpenGL基本语法
函数命名规则
OpenGL函数都遵循一个命名约定,即采用以下格
从而可以在视窗内绘制逼真的三维景观。
20
1.1OpenGL的主要功能
实时动画
为了获得平滑的动画效果,需要先在内存中生成 下一幅图象,然后把已经生成的图象从内存拷 贝到屏幕上,这就是 OpenGL 的双缓存技术 (double buffer)。OpenGL 提供了双缓存 技术的一系列函数。
21
1.1OpenGL的主要功能
交互技术
目前有许多图形应用需要人机交互,OpenGL 提
供了方便的三维图形人机交互接口,用户可以选
  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节。

相关文档
最新文档