计算机图形学 实验1 《实验环境配置和基本图元绘制》

计算机图形学 实验1 《实验环境配置和基本图元绘制》

一、实验目的

配置基本实验环境、安装软件包、建立工程和绘制基本图元,要求学会点、线、三角形、四边形的绘制方法,学会消息传递和响应机制,用一个实例完成上述要求。

二、实验内容

1、配置OpenGL绘图环境;
2、绘制点、线、三角形、四边形等基本图元。

三、实验方法

以Visual Studio 2019为开发环境,合理配置第三方glut相关文件(部署glut头文件、glut动态链接库、glut.lib类型库),并且使用OpenGL的基本绘制模式(包括GL_LINES、GL_POINTS、GL_TRIANGLES、GL_QUADS等)进行基本图形的绘制。

四、实验步骤

1、配置OpenGL绘图环境
① 选择Visual Studio 2019为开发环境,获取glut相关文件(这里用的是老师给的,也可以在官网下载glut压缩包),包括glut.h、glut.dll、glut32.dll、glut32.lib四个文件;
② 将glut.h拷贝进VS安装目录下的include\GL文件夹内,这里笔者的路径是
D:\Tools\Visual Studio 2019\VS IDE\VC\Tools\MSVC\14.28.29333\include\GL;

计算机图形学 实验1 《实验环境配置和基本图元绘制》_第1张图片

③ 将glut.lib拷贝进VS安装目录下lib\x86文件夹内,这里笔者的路径是
D:\Tools\Visual Studio 2019\VS IDE\VC\Tools\MSVC\14.28.29333\lib\x86;

计算机图形学 实验1 《实验环境配置和基本图元绘制》_第2张图片

④ 将两个.dll文件(glut.dll、glut32.dll)拷贝进系统目录,基于自己的系统是64位的windows10,将这两个动态链接库文件同时拷贝进C:\Windows\System32目录和 C:\Windows\SysWOW64目录,到此所有配置基本完成;
⑤ 进行配置试验,在VS 2019内新建一个空项目,向项目内添加一个测试用的源文件并运行,这里注意到windows环境下有时包含Windows.h头文件是有必要的,不然可能运行失败。

2、绘制点、线、三角形、四边形等基本图元。
① 将上述新建的工程中添加的文件设置从生成中排除以免多个main函数导致出错;
② 工程内新建一个空白源文件,包含必要的头文件如Windows.h、GL\glut.h等并写出main函数;
③ 搭好main函数和展示函数的框架,即在main函数中添加绘制必备的几个基本步骤,包括初始化函数glutInit()、绘制模式选择函数glutInitDisplayMode()、窗体大小设置函数glutInitWindowSize()、创建窗口函数glutCreateWindow()、注册函数glutDisplayFunc()、消息循环函数glutMainLoop()等,并且写出display函数(即等待被注册的函数);
④ 在display函数中进行绘制,display函数中可以进行多次绘制(主要是更改缓冲区内容),最后使用glFlush函数将缓冲区的内容刷新到屏幕上进行显示即可。其中每次绘制的基本步骤是先通过glBegin()函数的参数确定绘制的基本图元类型,在glBegin()glEnd()函数包含的代码段内,使用glVertex2d确定图形的基本要素(由于这里主要是点、线、三角形和四边形,所以只需确定其顶点或者起始终止位置点即可);
⑤ 最后将完成的display函数通过注册函数glutDisplayFunc(display)进行注册,将几何形状画进画布(重绘消息),运行程序检验结果。

五、实验结果

实验输出图(文字部分是解释):

计算机图形学 实验1 《实验环境配置和基本图元绘制》_第3张图片

六、实验结论

在没有显式地进行设置的情况下,glVertex2d(x, y)函数的参考坐标位于窗口正中央;OpenGL glut默认的窗口显示范围只有[-1,1];图形绘制的颜色(前景色)、直线的绘制类型等具有延迟性,即更改之后除非下次再更改或者清除效果,否则值会一直保持下去。

源码:

#include 
#include 
#include 
#include 

void display(void) {

	glClearColor(0, 0, 0, 0);//设定清除窗口的颜色
	glClear(GL_COLOR_BUFFER_BIT);//执行清除窗口的指令
	glColor3f(1.0, 1.0, 1.0);//指定绘制图形的颜色(前景色)

	glLineWidth(3.0);
	glBegin(GL_LINES);
		glVertex2f(-0.5, 0.75);
		glVertex2f(0.5, 0.75);//绘制线,指定起点与终点
	glEnd();

	glEnable(GL_LINE_STIPPLE);
	glLineStipple(1, 0x00FF);//dashed
	glLineWidth(3.0);
	glBegin(GL_LINES);
		glVertex2f(-0.5, 0.65);
		glVertex2f(0.5, 0.65);//绘制线,指定起点与终点
	glEnd();

	glLineStipple(1, 0x0101);//dotted
	glLineWidth(3.0);
	glBegin(GL_LINES);
		glVertex2f(-0.5, 0.7);
		glVertex2f(0.5, 0.7);//绘制线,指定起点与终点
	glEnd();

	
	glBegin(GL_POINTS);
		glVertex2d(-0.5, -0.5);
		glVertex2d(-0.5, 0.5);
		glVertex2d(0.5, 0.5);
		glVertex2d(0.5, -0.5);//绘制四个点
	glEnd();

	glBegin(GL_TRIANGLES);//绘制三角形,指定三个点为顶点
		glVertex2d(-0.5, 0.0);
		glVertex2d(0.0, 0.5);
		glVertex2d(0.0, 0.0);
	glEnd();

	glBegin(GL_QUADS);//绘制四边形,指定四个点为顶点
		glVertex2d(0.0, 0.0);
		glVertex2d(0.3, 0.0);
		glVertex2d(0.3, -0.3);
		glVertex2d(0.0, -0.3);
	glEnd();
	
	glFlush();//将缓冲区的内容刷新到屏幕上进行显示
}

int main(int argc, char** argv)
{
	glutInit(&argc, argv);
	glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH);
	glutInitWindowSize(500, 500);// 设定初始时窗口的大小
	glutInitWindowPosition(100, 100);// 设定初始时窗口的位置
	glutCreateWindow("exp1");// 创建窗口,命名为exp1
	glutDisplayFunc(display);//画图函数,将几何形状画进画布(重绘消息),同时这也是注册函数
	glutMainLoop();//进入消息循环
	return 0;
}

七、实验小结

第一方面的困难来自环境的选择与配置。因为自己之前从未用过Visual Studio的系列版本,写C++程序一般用Code::Blocks或者Dev C++,因此在实验的时候并未使用Visual Studio而是选择的Code::Blocks进行配置,并且上网查找了配置的相关资料,虽然步骤正确但是一直没有配置成功。折腾了一上午,最后自己发现网上的教程大多都是2019年以前的,找到一篇2020年的博客,博主提供的原因是2020.03版本的Code::Blocks在查找动态链接库的时候会选择性忽略GLUT.LIB文件和两个.DLL文件,所以一直无法成功运行,但是17年的版本没有这个问题。然而17年的版本不太好安装,最后干脆选择使用Visual Studio 2019并成功完成了配置。

第二方面是因为自己对OpenGL绘图的基本流程还不是很清楚。这就像我们刚开始学C++程序设计时需要学习如何写一个简单的Hello World程序一样,控制台程序有一个基本的流程(虽然后期可能不太一定按照这个流程来),OpenGL编程也是这样。在查阅了一些相关的简单绘制程序的博客之后也解决了这个问题。

你可能感兴趣的:(计算机图形学,开发工具配置问题,opengl,图形学,c++,visualstudio)