视频加载失败

课程

1568 字
约 5 分钟

实验1 实验环境的熟悉

计算机图形学labs/lab01-opengl-drawing·更新于 2026-09-15

实验1 实验环境的熟悉

一、实验目的

熟悉编程环境;了解光栅图形显示器的特点;了解计算机绘图的特点;掌握GLUT工具包的安装过程;利用GLUT开发库,使用编译OpenGL程序。

二、实验要求

  1. 将实验代码输入到编程环境中运行,得到运行结果。

  2. 在main函数中的各语句,除了最后的return之外,其余全部以glut开头。这种以glut开头的函数都是GLUT工具包所提供的函数,分析代码中出现的glut和gl开头的函数以及参数的含义是什么。

  3. 修改函数的参数,得到不同颜色和不同大小的模型。

三、实验学时

2学时

四、准备知识

OpenGL作为当前主流的图形API之一,它在一些场合具有比DirectX更优越的特性

1、与C语言紧密结合

OpenGL命令最初就是用C语言函数来进行描述的,对于学习过C语言的人来讲,OpenGL是容易理解和学习的。如果你曾经接触过TC的graphics.h,你会发现,使用OpenGL作图甚至比TC更加简单。

2、强大的可移植性

微软的Direct3D虽然也是十分优秀的图形API,但它只用于Windows系统。而OpenGL不仅用于 Windows,还可以用于Unix/Linux等其它系统,它甚至在大型计算机、各种专业计算机(如:医疗用显示设备)上都有应用。并且,OpenGL 的基本命令都做到了硬件无关,甚至是平台无关。

3、高性能的图形渲染

OpenGL是一个工业标准,它的技术紧跟时代,现今各个显卡厂家无一不对OpenGL提供强力支持,激烈的竞争中使得OpenGL性能一直领先。

总之,OpenGL是一个非常优秀的图形软件接口。OpenGL官方网站(英文)http://www.opengl.org

五、实验内容

1、选择编译环境

现在Windows系统的主流编译环境有Visual C++、C++ Builder、Dev-C++等,它们都是支持OpenGL的。这里我们选择Visual C++作为学习OpenGL的实验环境。

2、安装GLUT工具包

GLUT不是OpenGL所必须的,但它会给我们的学习带来一定的方便,推荐安装。

官方网站下载地址为:http://www.opengl.org/resources/libraries/glut/glutdlls37beta.zip。

Windows环境下安装GLUT的步骤:

(1)将下载的压缩包解开,将得到5个文件。

(2)把解压得到的glut.h文件放在安装目录下面的“include/GL”文件夹中(如果没有“GL”文件,则自己建一个)。

(3)把解压得到的glut.lib和glut32.lib放到安装目录下面的静态函数库“lib”所在文件夹。

(4)把解压得到的glut.dll和glut32.dll放到操作系统目录下面的SysWOW64文件夹内。(典型的位置为C:\Windows\SysWOW64)

3、建立一个OpenGL工程

VC6.0:选择File->New->Project,然后选择Win32 Console Application,选择一个名字,然后按OK。在谈出的对话框左边点Application Settings,找到Empty project并勾上,选择Finish。然后向该工程添加一个代码文件,取名为“OpenGL.cpp”。

CodeBlocks:选择file新建工程,选GLUT project;选定项目路径,取名为“OpenGL”;选择GLUT的路径,即CodeBlcoks 的MinGW目录下,最后Finish。测试运行结果。

打开包含main函数的主文件,输入以下代码:

#include <GL/glut.h>

void init(void) //
{
	glEnable(GL_DEPTH_TEST); 

	GLfloat position[] = {1.0, 1.0, 1.0, 0.0};
	glLightfv(GL_LIGHT0, GL_POSITION, position);
	glEnable(GL_LIGHTING);
	glEnable(GL_LIGHT0);

	GLfloat ambient[] = {0.0, 0.0, 0.0, 1.0};
	GLfloat diffuse[] = {0.25, 0.95, 0.5, 1.0};
	GLfloat specular[] = {1.0, 1.0, 1.0, 1.0};
	glMaterialfv(GL_FRONT, GL_AMBIENT, ambient);
	glMaterialfv(GL_FRONT, GL_DIFFUSE, diffuse);
	glMaterialfv(GL_FRONT, GL_SPECULAR, specular);
	glMaterialf(GL_FRONT, GL_SHININESS, 50.0);
}

void display(void)
{
	glClearColor(0.75f, 0.75f, 0.75f, 1.0f);
	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

	glNewList(1, GL_COMPILE);
		glutSolidTeapot(0.5);
	glEndList();
	glCallList(1);

	glFlush();
}

void reshape(GLsizei w, GLsizei h)
{
	glViewport(0, 0, w, h);
	glMatrixMode(GL_PROJECTION);
	glLoadIdentity();
	glOrtho(-1.0, 1.0, -1.0, 1.0, -1.0, 1.0);
	glMatrixMode(GL_MODELVIEW);
}

int main(int argc, char** argv)
{
	glutInit(&argc, argv);										//初始化工具包
	glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH);	//设置显示模式
	glutInitWindowPosition(0, 0);								//设置窗口在屏幕上的位置
	glutInitWindowSize(500, 500);								//设置窗口的大小
	glutCreateWindow("My first attempt");						//打开屏幕窗口
	

	glutReshapeFunc(reshape);
	glutDisplayFunc(display);
	
	init();				//必要的其他初始化函数
	glutMainLoop();		//进入循环
	
	return 0;
}
Profile Image of the Author
Sonder
好想要技术
这是公告标题
这只是一个公告
分类
标签
站点信息
构建平台
GitHub Actions
博客版本
Firefly v6.16.7
文章许可
CC BY-NC-SA 4.0
文章目录