【OpenGL】《计算机图形学基础》(第二版)实验课代码

配置开发环境

本文用Vscode+Cmake+MSVC2019开发,环境配置教程参考:Windows下配置C++开发环境:Vscode+VS+CMake

首先,从官网下载库文件,库文件压缩包打开如下图所示:
在这里插入图片描述
将文件复制到项目目录下,项目目录配置如下:
在这里插入图片描述
CMakeList.txt如下:

cmake_minimum_required(VERSION 3.20)
project(opengl)

include_directories(glut/include)
link_directories(glut/lib)

add_executable(${PROJECT_NAME} main.cpp)
target_link_directories(${PROJECT_NAME} PUBLIC glut32.lib)

# 程序运行时不打开黑窗
Set_Target_Properties(${PROJECT_NAME} PROPERTIES LINK_FLAGS_RELEASE "/SUBSYSTEM:WINDOWS /ENTRY:mainCRTStartup") 

将后缀名为.lib和.dll的文件放到编译生成的exe文件附近程序即可运行

实验1 OpenGL初识

main.cpp

#include <glut.h>

void myDisplay(void)
{
	glClearColor(0.0, 0.0, 0.0, 0.0); //预设颜色缓冲区的值:红色、绿色、蓝色、alpha
	glClear(GL_COLOR_BUFFER_BIT);     //通过预设的值清空色彩缓存区

	glColor3f(1.0f, 1.0f, 1.0f);      //设置绘制矩形的颜色
	glRectf(-0.5f,-0.5f,0.5f,0.5f);   //绘制矩形

	// 绘制三角形
	glBegin(GL_TRIANGLES);
	glColor3f(1.0f, 0.0f, 0.0f); glVertex2f(0.0f, 1.0f);
	glColor3f(0.0f, 1.0f, 0.0f); glVertex2f(0.8f, -0.5f);
	glColor3f(0.0f, 0.0f, 1.0f); glVertex2f(-0.8f, -0.5f);
	glEnd();

	// 画点
	glPointSize(3);
	glBegin(GL_POINTS);
	glColor3f(1.0f, 0.0f, 0.0f); glVertex2f(-0.4f, -0.4f);
	glColor3f(0.0f, 1.0f, 0.0f); glVertex2f(0.0f,   0.0f);
	glColor3f(0.0f, 0.0f, 1.0f); glVertex2f(0.4f,   0.4f);
	glEnd();


	glFlush(); // 画图

}


int main(int argc,char *argv[])
{
	glutInit(&argc,argv);                          //初始化glut  (可不写默认)
	glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);   //显示模式初始化 RGB显示模式,单缓冲模式
	glutInitWindowPosition(400, 400);              //窗口窗口位置  (可不写默认)
	glutInitWindowSize(400, 400);                  //窗口大小  (可不写默认)
	glutCreateWindow("The first OpenGL programe"); //窗口名称
	glutDisplayFunc(&myDisplay);                   //自定义函数绘图
	glutMainLoop();                                //消息循环相应
	return 0;
}


实验2&3 直线光栅化

DDA算法、Bresenham算法、中点线算法

main.cpp



实验4 OpenGL交互

main.cpp

#include <glut.h>
#include <stdlib.h>

// 四字节精度IEEE 754-1985 浮点数
// 矩形中心位置
GLfloat x = 0.0;
GLfloat y = 0.0;
// 矩形大小
GLfloat size = 50.0;

// 有符号四字节整型
// 窗口和视景体高、宽
GLsizei wh = 500, ww =500;

void drawSquare(GLint x, GLint y){
	y = wh - y;

	// 将所有点绘制成凸多边形
	glBegin(GL_POLYGON);
	glVertex3f(x + size, y + size, 0);
	glVertex3f(x - size, y + size, 0);
	glVertex3f(x - size, y - size, 0);
	glVertex3f(x + size, y - size, 0);
	glEnd();
}

void myDisplay(void)
{

	glClear(GL_COLOR_BUFFER_BIT);     //通过预设的值清空色彩缓存区
	glColor3f(1.0,1.0,1.0);           //白色
	drawSquare(x,y);
	glutSwapBuffers();   //双缓冲技术中,交换两个缓冲区的指针
	glutPostRedisplay(); //更新画面

}

void init(){
	glClearColor(0.0, 0.0, 0.0, 1.0); //预设颜色缓冲区的值:红色、绿色、蓝色、alpha
}

void myReshape(GLint w, GLint h){
	// 设置视区:x,y,width,height。其中,(x,y)表示视区矩形左下角的坐标,width分别表示视区矩形的宽度和高度
	glViewport(0,0,w,h);

	// 投影视图声明流程(一堆看不懂的)
	glMatrixMode(GL_PROJECTION);  // 将当前矩阵指定为投影矩阵
	glLoadIdentity();             // 然后把矩阵设为单位矩阵
	glOrtho(0,w,0,h,-1.0,1.0);    // 创建窗口大小的视景体
	/*
	创建视景体 glOrtho(left, right, bottom, top, near, far), 
    left表示视景体左面的坐标,right表示右面的坐标,bottom表示下面的,top表示上面的,near前面,far后面。
	简单来说就是创建一个三维的小盒子,把物体放在小盒子的中心,小盒子的左下角对齐视区的左下角
	*/
	glMatrixMode(GL_MODELVIEW);   //GL_MODELVIEW 模型视图(没了这行会报错,不知道为什么)

}

void myMouse(GLint button, GLint state, GLint wx, GLint wy){

	// 逻辑AND运算符:&&

	/*
		第一个参数表明哪个鼠标键被按下或松开,这个变量可以是下面的三个值中的一个:
		GLUT_LEFT_BUTTON
		GLUT_MIDDLE_BUTTON
		GLUT_RIGHT_BUTTON
	*/ 

	/*
		第二个参数表明,函数被调用发生时,鼠标的状态,也就是是被按下,或松开,可能取值如下:
		GLUT_DOWN
		GLUT_UP
	*/

	// 鼠标当前位置(wx,wy)
	if(button == GLUT_RIGHT_BUTTON && state == GLUT_DOWN)
		exit(0);
	if(button == GLUT_LEFT_BUTTON && state == GLUT_DOWN){
		// 修改矩形中心的位置
		x = wx;
		y = wy;
	}

}

int main(int argc,char *argv[])
{
	glutInit(&argc,argv);                          //初始化glut  (可不写默认)
	glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE);   //显示模式初始化 RGB显示模式,双缓冲模式
	glutInitWindowPosition(400, 400);              //窗口窗口位置  (可不写默认)
	glutInitWindowSize(500, 500);                  //窗口大小  (可不写默认)
	glutCreateWindow("click to display square");   //窗口名称
	init();                                        //自定义颜色缓冲区初始化

	glutDisplayFunc(&myDisplay);                   //自定义函数绘图
	glutReshapeFunc(&myReshape);
	glutMouseFunc(&myMouse);
	glutMainLoop();                                //消息循环相应
	return 0;
}


实验总结见源代码注释

  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实验一 OpenGL+GLUT开发平台搭建 5 小实验1: 开发环境设置 5 小实验2: 控制窗口位置和大小 6 小实验3:默认的可视化范围 6 小实验4:自定义可视化范围 7 小实验5: 几何对象变形的原因 8 小实验6: 视口坐标系及视口定义 8 小实验7:动态调整长宽比例,保证几何对象不变形 9 实验二 动画和交互 10 小实验1: 单缓冲动画技术 10 小实验2: 双缓冲动画技术 11 小实验3:键盘控制 13 小实验4:鼠标控制【试着单击鼠标左键或者右键,试着按下鼠标左键后再移动】 14 实验三 几何变换、观察变换、三维对象 16 小实验1:二维几何变换 16 小实验2:建模观察(MODELVIEW)矩阵堆栈 17 小实验3:正平行投影1 19 小实验4:正平行投影2 19 小实验5:正平行投影3 20 小实验6:透射投影1 21 小实验6:透射投影2 22 小实验7:三维对象 24 实验四 光照模型和纹理映射 26 小实验1:光照模型1----OpenGL简单光照效果的关键步骤。 26 小实验2:光照模型2----光源位置的问题 28 小实验3:光照模型3----光源位置的问题 31 小实验4:光照模型4----光源位置的问题 33 小实验5:光照模型5----光源位置的问题 35 小实验6:光照模型6----光源位置的问题 38 小实验7:光照模型7----光源位置的动态变化 40 小实验8:光照模型8----光源位置的动态变化 43 小实验9:光照模型9---光源位置的动态变化 45 小实验10:光照模型10---聚光灯效果模拟 48 小实验11:光照模型11---多光源效果模拟 50 小实验12:光照效果和雾效果的结合 53 小实验13:纹理映射初步—掌握OpenGL纹理映射的一般步骤 56 小实验13:纹理映射—纹理坐标的自动生成(基于参数的曲面映射) 59 小实验14:纹理映射—纹理坐标的自动生成(基于参考面距离) 61
### 回答1: 计算机图形学基础OpenGL版)是一本介绍计算机图形学基础知识的书籍,主要使用OpenGL作为实现工具。该书内容涵盖了计算机图形学的基本概念、图形学编程基础、3D图形学、光照和材质、纹理映射、几何变换、视图变换、投影变换等方面的内容。该书适合计算机图形学初学者学习,也适合OpenGL编程初学者学习。 ### 回答2: 计算机图形学基础(opengl版) pdf 是一本讲解计算机图形学基础知识的书籍,其重点关注如何使用OpenGL来实现图形学应用。该书籍从基础入手,详细阐述了OpenGL基础知识和编程技巧,涵盖了OpenGL的绘图操作、光照、材质、纹理映射等方面的内容。 作为计算机科学领域重要的一支,计算机图形学的应用已经广泛地渗透到生活各个领域。例如游戏、动画、虚拟现实、建筑、医学等多个领域,都离不开计算机图形学的支持。因此,掌握计算机图形学基础知识,对于计算机科学学习者来说十分重要。 在该书的学习过程中,读者需要了解OpenGL的绘制模式,包括点、线、三角形和四边形等基本图形。同时,书中也讲解了如何通过OpenGL的API实现图形的旋转、缩放、平移等变换。此外,读者还需要了解OpenGL的光照模型和材质模型,从而实现多彩多样的图形。 此外,该书籍也重点介绍了OpenGL实现纹理映射技术。纹理映射技术可以帮助设计师将贴图与模型结合,以实现更加真实的效果。同时,该书籍还涵盖了OpenGL的卡通渲染和OpenGL的深度检测以及多重采样技术等方面的内容。 总之,计算机图形学基础(opengl版) pdf 是一本内容详尽、学习难度适中的图形学基础知识的书籍。它既覆盖了丰富的理论知识,也体现了实践方面的应用。对于学习计算机图形学的初学者来说,这是一本非常好的入门教材。 ### 回答3: 计算机图形学基础(opengl版) pdf是一本非常优秀的图形学教材,它涵盖了图形学基础的各个方面,从三角形到光照再到着色和阴影,从基本的渲染方程到高级的像素运算,本书讲解了图形学的主要概念,算法和技术,同时采用opengl作为实现工具,给予读者一些实战经验。 首先,在理论方面,计算机图形学基础(opengl版) pdf通过简单而易懂的语言,对图形学的基本概念进行了详细的讲解。它在三维坐标系的基础上,介绍了各种图形学的基本概念,如顶点,向量,矩阵,坐标变换等。然后,通过顶点组成三角形来进行渲染,并进一步介绍切线空间和相机模型的概念。作者还详细阐述了光照、阴影算法和纹理映射等重要技术,这些都是图形学的重点中的重点。 其次,在实践方面,计算机图形学基础 (opengl版) pdf提供了丰富的实验和示例代码,帮助读者更好地理解和运用图形学知识。例如,第三章介绍了OpenGL渲染流程和基本操作,第四章则介绍了绘制基本图形形状,第五章介绍了纹理映射实现。几乎每个章节的结束都配有实例源代码供读者练习使用。此外,也有课堂实验和作业,更进一步提高了实践操作的难度与复杂度。 最后,值得一提的是,计算机图形学基础 (opengl版) pdf的编写风格简洁又精准,图文并茂。它不仅能够让初学者一步步了解图形学的基本概念,但也满足了几乎所有图形学的应用需求,尤其是那些想要使用opengl来实现复杂图形学项目的人们。总的来说,它是一本非常优秀的图形学教材,值得每个学习图形学的人士阅读掌握。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值