实验一OpenGL图形编程入门
一、 实验目的
1.了解和掌握OpenGL的安装。
2.掌握一个简单的基于OpenGL的C++程序结构。
3.掌握Win32程序框架。
4.掌握OpenGL中若干基本图形的绘制。
二、 实验环境
硬件要求:
PC,主流配置,最好为独立显卡,显存512MB以上。
软件环境:
操作系统:Windows 7/Windows 8O
语言开发工具:Microsoft Visual Studio 2010,Visual C++o
程序框架:
Win32应用程序。
本书其他实验的实验环境与此相同,以后不再赘述。
三、 实验要求与内容
要求:将所有实验步骤生成的效果截图拷贝到实验报告文档里备查,并附上相应的代码。 Word文档命名方式为“学号姓名-实验序号-实验名称”。后面的实验与此要求一致。
内容:
1.准备好OpenGL库文件。
•Glut32.dll 路径为 %system root%\ SysWOW64o
•Glut32.1ib 路径为 PATH\libo
•Glut.h 路径为 PATH\Includeo
•system root 为 Windows 7 或 Windows 8 安装路径。
•PATH 为 Visual Studio 2010 的安装路径。
2.建立•一个工程文件,并运行样本程序my firstjprogram.cpp,观看结果。
1 )启动Microsoft Visual Studio 2010,在菜单栏中单击“文件”—“新建” 一 “项目”, 如实验图1-1所示。
2)在“新建项目”对话框中选择Visual C++的Win32项目,然后输入项目名称(例如 lab 1-basis),选择项目的保存位置(或者使用默认保存路径),如实验图1-2所示,单击“确 定”按钮。
3)将工程文件的“源文件”中的C++源文件(labl-basis.cpp)替换成以下样本程序:
以上样本程序的运行结果是创建一个名为“hello”的窗口。
3.认真阅读以上样本程序,理解每个函数的作用,并修改窗口标题,让其显示为“我的 第一个0penGL程序”。
4.窗口的设置。
在默认情况下,窗口的位置出现在屏幕的左上角,大小为300 x 300o
要求:
1 )修改窗口位置,使之处于屏幕正中央。
2)将窗口大小改为整个屏幕大小。
3)修改窗口大小为其他尺寸。
参考函数:
glutlnitWindowPosition(int x, int y);
//为窗口指定初始位置,窗口左上角在屏幕的位置为(x,y)
//如果不写该函数,或者写成"'glutlnitWindowPosition (0,0);"均表示窗口的位置出现在屏幕的左上角 glutlnitWindowSize (int width, int height); 〃设置窗口 大小
//如果不写该函数,表示窗口的大小为默认的300X300
int sheight = glutGet(GLUT_SCREEN_WIDTH);int swidth = glutGet(GLUT_SCREEN_HEIGHT);
获取屏幕的长度与宽度
5.背景色的设置。
在默认情况下,背景色是黑色。
要求:
1 )将窗口背景设置为白色。
2)将窗口背景设置为其他颜色。
参考函数:
glClearColor(r,g,b,alpha) ;//设置背景色,此函数放在 display()中,并且放在“glClear(GL_ //COLOR BUFFER BIT) ; M 语句的前面
其中r、g、b取值范围是[0,1],可以是浮点数;alpha取值范围为0〜1,在这里其值不起作用,以后再讨论该参数。
例如glClearColor(0,0,0,0)为黑色背景,glClearColor3f(l,l,l,0)为白色背景,其他颜色应 该如何设置请读者思考。
6.基本图形绘制。
绘制函数一般放置在清屏语句
glClear (GL_COLOR_BUFFER_BIT) ; // 刷新颜色缓存区
和刷新语句
glFlush() ; //用于刷新命令队列和缓冲区,使所有尚未被执行的OpenGL命令得到执行
之间。
矩形绘制:
1 )在 display 绘图函数的 “glClear(GL_COLOR_BUFFER_BIT);” 语句后面増加 glRecf(0,0,1,1);”,运行程序查看效果。
3)修改矩形的对角坐标,看看有什么变化和问题。
*
glRec(0,0,1,1)参数分别是x1,y1,x2,y2表示矩形中左下角和右上角的坐标。坐标用的是相对窗口位置的坐标,且窗口的中心是坐标系原点,水平向右为X轴正向,竖直向上为Y轴正向。
3)根据给出的函数,试画出直线和三角形等基本图形。
//绘制直线
glBegin(GL_LINES);
glVertex2f(0,0);
glVertex2f(0.8,0.8);
glEnd();
//画三角形,xl、yl、x2、y2, x3、y3为三角形顶点坐标 glBegin(GL_TRIANGLES);
glVertex2f(0,0);
glVertex2f(0.5,0.5);
7.绘图色的设置。
1)将绘制的图形修改成红色。
2)将绘制的不同基本图元设为不同的颜色。
参考函数:
glColor3f (r,g,b) ; //设置绘图色r、g、b取值范围为[0,1],可以为浮点数
例如:
glColor3f (1,0,0); 〃设置为红色
glColor3f (0, 1,0) ; // 设置为绿色
glColor3f (0,0,1) ; // 设置为蓝色
其他绘图颜色应如何设置请读者思考。
8.绘制几何图形。
1 )更改标题栏,加上学号、姓名。
2)绘制两个以上基本几何形状。
3 )设置三种颜色。
代码:
void display(void) {
glClearColor(0.0f, 0.0f, 0.0f, 0.0f); //设置清屏颜色
glClear(GL_COLOR_BUFFER_BIT); //刷新颜色缓存区
glColor3f(1.0f, 0.0f, 0.0f); //设置为红色
glRectf(-0.1f, -0.1f, -0.2f, -0.2f); //矩形
//绘制直线
glColor3f(0.0f, 1.0f, 0.0f); //设置为绿色
glBegin(GL_LINES);
glVertex2f(0.0f,0.0f);
glVertex2f(0.3f, -0.2f);
glEnd();
//画三角形,x1、y1、x2、y2、x3、y3为三角形顶点坐标
glColor3f(0.5f, 0.6f, 0.2f); //设置为草绿色
glBegin(GL_TRIANGLES);
glVertex2f(0.0f,0.0f);
glVertex2f(0.2f, 0.2f);
glVertex2f(0.0f, 0.2f);
glEnd();
glFlush(); //用于刷新命令队列和缓存区,使所有尚未被执行的OpenGL命令得到执行
}
四、思考题
1.默认窗口位置在屏幕的什么位置?如果要改变窗口在屏幕的位置应该如何处理?如何改变窗口的大小?
2.本实验中默认的绘图坐标原点在窗口中的什么位置?
3.如何修改背景颜色和绘图颜色?绘图颜色的顺序与位置有什么要求?
4.对于“#include<glut.h>”,头文件glut.h放在哪个文件夹下?
5.图形函数的顺序与位置有什么要求?试改变程序中一些图形函数的顺序,看运行结果是否有变化。
答:
1.
(1)默认窗口位置在屏幕的左上角,函数glutlnitWindowPosition(int x, int y)规定窗口初始位置,窗口左上角在屏幕的位置为(x,y)。
(2)如果不写该函数,或者写成"'glutlnitWindowPosition (0,0);"均表示窗口的位置出现在屏幕的左上角。如果要改变窗口在屏幕的位置应该更改x和y的值。
(3)“glutlnitWindowSize(int width,int height);”用来设置窗口大小。
2.坐标用的是相对窗口位置的坐标,且窗口的中心是坐标系原点,水平向右为X轴正向,竖直向上为Y轴正向,即默认的绘图坐标原点在窗口中的中心位置。
3.
(1)“glClearColor(r,gz bz alpha);”用来设置清屏颜色,即用来修改背景颜色,“glColor3f(r,g,b);”用来修改绘图颜色。
(2)绘图颜色的应在清屏色之后,画图之前,而且必须放在display()中。
4.“#include<glut.h>”,头文件glut.h放在“~:\VS2019\VC\Tools\MSVC\14.29.30133\include\GL”中。
5.图形函数应在清屏颜色之后,否则无法显示,而且须放在display()中。
五、体会
OpenGL库文件在VS2019的安装位置有所改变,同时程序的框架也有所改变,代码需要进行一定的改动才能成功运行,过程有点曲折,在不断的试错中,最终完成实验。但函数的总体功能没有发生较大的改变,在实验中体会很多也收获很多,对于OpenGL编程有了初步的认识,对于之后的学习有了很好地基础。