计算机图形学实验03_光照模型

时间:2024.5.2

计算机图形学实验报告03

北方工业大学

计算机图形学课程实验报告

题 目: 实验三 光照模型 学 院: 计算机学院 专 业: 数字媒体技术 指导教师: 学生班级: 学生学号: 学生姓名:

教师评定:

1

计算机图形学实验报告03

学号:

班级: 姓名:

实验报告3 光照模型

一.实验目的

1.熟悉OpenGL图形库;

2.掌握光照模型算法。

二.实验环境

1.软件环境:

操作系统:WinXp

应用软件:VC6.0,OpenGL

2.硬件环境(查看自己的机子)

CPU: Intel PIV 2.80GHz

内存RAM: 1GB

显卡:NVIDIA GeForce7650,256M显存

三.实验内容1

写程序实现一个聚光灯围绕立方体旋转程序。要求给出RenderScene()函数。 void RenderScene (void)

{

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // 清楚颜色数据和深度数据(清屏)

glColor3f(1.0,1.0,1.0);

glLoadIdentity(); //初始变换矩阵为单位矩阵

glTranslated(0,-1,-5); //平移0,0,-5向Z负方向平移5个单位

glPushMatrix(); //压缩矩阵,设定光源的位置

glDisable(GL_LIGHTING);

glRotatef(yRot, 0, 1, 0); //光源的旋转

glTranslatef(light_change[0],light_change[1],light_change[2]); //光源的位置 glTranslatef(light_position[0], light_position[1],light_position[2]); //光源位置

glutSolidSphere(0.1, 4,4);//利用库函数绘制一个半径为1的球体。表示光源在这里 glEnable(GL_LIGHTING);

glLightfv(GL_LIGHT0, GL_POSITION, light_position);

glPopMatrix();

light_direction[0] = -light_change[0];

2

计算机图形学实验报告03

light_direction[1] = -light_change[1];

light_direction[2] = -light_change[2];

glLightfv(GL_LIGHT0, GL_SPOT_DIRECTION, light_direction); glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse);

glPopMatrix(); //光源设置完毕

glPushMatrix(); //压入变换矩阵那

// glutSolidSphere(1, 30,30);//利用库函数绘制一个半径为1的球体。

glBegin(GL_QUADS);

// 前面

glColor3f(1,1,1);

glVertex3f(-1.0f, -1.0f, 1.0f); // 四边形的左下

glVertex3f( 1.0f, -1.0f, 1.0f); // 四边形的右下

glVertex3f( 1.0f, 1.0f, 1.0f); // 四边形的右上

glVertex3f(-1.0f, 1.0f, 1.0f); // 四边形的左上

//后面

glColor3f(1,1,1);

glVertex3f(-1.0f, -1.0f, -1.0f); // 四边形的右下

glVertex3f(-1.0f, 1.0f, -1.0f); // 四边形的右上

glVertex3f( 1.0f, 1.0f, -1.0f); // 四边形的左上

glVertex3f( 1.0f, -1.0f, -1.0f); // 四边形的左下

// 顶面

glColor3f(1,1,1);

glVertex3f(-1.0f, 1.0f, -1.0f); // 四边形的左上

glVertex3f(-1.0f, 1.0f, 1.0f); // 四边形的左下

glVertex3f( 1.0f, 1.0f, 1.0f); // 四边形的右下 glVertex3f( 1.0f, 1.0f, -1.0f); // 四边形的右上

// 底面

glColor3f(1,1,1);

glVertex3f(-1.0f, -1.0f, -1.0f); // 四边形的右上

glVertex3f( 1.0f, -1.0f, -1.0f); // 四边形的左上

glVertex3f( 1.0f, -1.0f, 1.0f); // 四边形的左下

glVertex3f(-1.0f, -1.0f, 1.0f); // 四边形的右下

// 右面

glColor3f(1,1,1);

glVertex3f( 1.0f, -1.0f, -1.0f); // 四边形的右下

3

计算机图形学实验报告03

glVertex3f( 1.0f, 1.0f, -1.0f); // 四边形的右上

glVertex3f( 1.0f, 1.0f, 1.0f); // 四边形的左上

glVertex3f( 1.0f, -1.0f, 1.0f); // 四边形的左下

// 左面

glColor3f(1,1,1);

glVertex3f(-1.0f, -1.0f, -1.0f); // 四边形的左下

glVertex3f(-1.0f, -1.0f, 1.0f); // 四边形的右下

glVertex3f(-1.0f, 1.0f, 1.0f); // 四边形的右上

glVertex3f(-1.0f, 1.0f, -1.0f); // 四边形的左上

glEnd();

glPopMatrix(); //弹出矩阵。

glutSwapBuffers(); //交换缓冲区。显示图形

}

四.实验内容2

写程序实现一个红色点光源围绕立方体旋转程序。要求给出RenderScene()函数。 float yRot = 0;

unsigned int nPre = 0;

GLfloat light_position[4] = {0,0,0,1}; //光位置

GLfloat light_diffuse[4] = {1,0,0,0}; //光的漫反色设置为红色

GLfloat light_change[3] = {3,3,-1}; //光源移动位置。

void display(void)

{

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // 清楚颜色数据和深度数据(清屏)

glColor3f(1.0,1.0,1.0);

glLoadIdentity(); //初始变换矩阵为单位矩阵

glTranslated(0,-1,-5); //平移0,0,-5向Z负方向平移5个单位

glPushMatrix(); //压缩矩阵,设定光源的位置

glDisable(GL_LIGHTING);

glRotatef(yRot, 0, 1, 0); //光源的旋转

glTranslatef(light_change[0],light_change[1],light_change[2]); //光源的位置 glTranslatef(light_position[0], light_position[1],light_position[2]); //光源位置

glutSolidSphere(0.1, 4,4);//利用库函数绘制一个半径为1的球体。表示光源在这里 glEnable(GL_LIGHTING);

4

计算机图形学实验报告03

glLightfv(GL_LIGHT0, GL_POSITION, light_position);

glPopMatrix();

glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse);

glPopMatrix(); //光源设置完毕

glPushMatrix(); //压入变换矩阵那

// glutSolidSphere(1, 30,30);//利用库函数绘制一个半径为1的球体。

glBegin(GL_QUADS);

// 前面

glColor3f(1,1,1);

glVertex3f(-1.0f, -1.0f, 1.0f); // 四边形的左下

glVertex3f( 1.0f, -1.0f, 1.0f); // 四边形的右下

glVertex3f( 1.0f, 1.0f, 1.0f); // 四边形的右上

glVertex3f(-1.0f, 1.0f, 1.0f); // 四边形的左上

//后面

glColor3f(1,1,1);

glVertex3f(-1.0f, -1.0f, -1.0f); // 四边形的右下

glVertex3f(-1.0f, 1.0f, -1.0f); // 四边形的右上

glVertex3f( 1.0f, 1.0f, -1.0f); // 四边形的左上

glVertex3f( 1.0f, -1.0f, -1.0f); // 四边形的左下

// 顶面

glColor3f(1,1,1);

glVertex3f(-1.0f, 1.0f, -1.0f); // 四边形的左上

glVertex3f(-1.0f, 1.0f, 1.0f); // 四边形的左下

glVertex3f( 1.0f, 1.0f, 1.0f); // 四边形的右下 glVertex3f( 1.0f, 1.0f, -1.0f); // 四边形的右上

// 底面

glColor3f(1,1,1);

glVertex3f(-1.0f, -1.0f, -1.0f); // 四边形的右上

glVertex3f( 1.0f, -1.0f, -1.0f); // 四边形的左上

glVertex3f( 1.0f, -1.0f, 1.0f); // 四边形的左下

glVertex3f(-1.0f, -1.0f, 1.0f); // 四边形的右下

// 右面

glColor3f(1,1,1);

glVertex3f( 1.0f, -1.0f, -1.0f); // 四边形的右下

5

计算机图形学实验报告03

glVertex3f( 1.0f, 1.0f, -1.0f); // 四边形的右上

glVertex3f( 1.0f, 1.0f, 1.0f); // 四边形的左上

glVertex3f( 1.0f, -1.0f, 1.0f); // 四边形的左下

// 左面

glColor3f(1,1,1);

glVertex3f(-1.0f, -1.0f, -1.0f); // 四边形的左下

glVertex3f(-1.0f, -1.0f, 1.0f); // 四边形的右下

glVertex3f(-1.0f, 1.0f, 1.0f); // 四边形的右上

glVertex3f(-1.0f, 1.0f, -1.0f); // 四边形的左上

glEnd();

glPopMatrix(); //弹出矩阵。

glutSwapBuffers(); //交换缓冲区。显示图形

}

五.实验内容3

读程序实现三个点光源围绕立方体旋转效果。要求点光源分别为R、G、B三色。要求给出RenderScene()函数及光源设置函数。

float yRot = 0;

unsigned int nPre = 0;

GLfloat light_position1[4] = {0,0,0,1}; //光位置

GLfloat light_position2[4] = {1,0,0,1};

GLfloat light_position3[4] = {0,1,0,1};

GLfloat light_diffuse1[4] = {1,0,0,0}; //光的漫反色

GLfloat light_diffuse2[4] = {0,1,0,0};

GLfloat light_diffuse3[4] = {0,0,1,0};

GLfloat light_change[3] = {3,3,-1}; //光源移动位置。

void display(void)

{

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // 清楚颜色数据和深度数据(清屏)

glColor3f(1.0,1.0,1.0);

glLoadIdentity(); //初始变换矩阵为单位矩阵

glTranslated(0,-1,-5); //平移0,0,-5向Z负方向平移5个单位

glPushMatrix(); //压缩矩阵,设定光源的位置

glDisable(GL_LIGHTING);

glRotatef(yRot, 0, 1, 0); //光源的旋转

glTranslatef(light_change[0],light_change[1],light_change[2]); //光源的位置 6

计算机图形学实验报告03

glTranslatef(light_position1[0], light_position1[1],light_position1[2]); //光源位置 glutSolidSphere(0.1, 4,4);//利用库函数绘制一个半径为1的球体。表示光源在这里 glEnable(GL_LIGHTING);

glLightfv(GL_LIGHT0, GL_POSITION, light_position1);

glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse1);

glPopMatrix(); //光源设置完毕

glPushMatrix(); //压缩矩阵,设定光源的位置

glDisable(GL_LIGHTING);

glRotatef(yRot, 0, 1, 0); //光源的旋转

glTranslatef(-3,3,-1); //光源的位置

glTranslatef(light_position2[0], light_position2[1],light_position2[2]); //光源位置 glutSolidSphere(0.1, 4,4);//利用库函数绘制一个半径为1的球体。表示光源在这里 glEnable(GL_LIGHTING);

glLightfv(GL_LIGHT1, GL_POSITION, light_position2);

glLightfv(GL_LIGHT1, GL_DIFFUSE, light_diffuse2);

glPopMatrix(); //光源设置完毕

glPushMatrix(); //压缩矩阵,设定光源的位置

glDisable(GL_LIGHTING);

glRotatef(yRot, 0, 1, 0); //光源的旋转

glTranslatef(3,-3,1); //光源的位置

glTranslatef(light_position3[0], light_position3[1],light_position3[2]); //光源位置 glutSolidSphere(0.1, 4,4);//利用库函数绘制一个半径为1的球体。表示光源在这里 glEnable(GL_LIGHTING);

glLightfv(GL_LIGHT1, GL_POSITION, light_position3);

glLightfv(GL_LIGHT1, GL_DIFFUSE, light_diffuse3);

glPopMatrix(); //光源设置完毕

glPushMatrix(); //压入变换矩阵那

glBegin(GL_QUADS);

// 前面

glColor3f(1,1,1);

glVertex3f(-1.0f, -1.0f, 1.0f); // 四边形的左下

glVertex3f( 1.0f, -1.0f, 1.0f); // 四边形的右下

glVertex3f( 1.0f, 1.0f, 1.0f); // 四边形的右上

glVertex3f(-1.0f, 1.0f, 1.0f); // 四边形的左上

//后面

glColor3f(1,1,1);

glVertex3f(-1.0f, -1.0f, -1.0f); // 四边形的右下

glVertex3f(-1.0f, 1.0f, -1.0f); // 四边形的右上

glVertex3f( 1.0f, 1.0f, -1.0f); // 四边形的左上

7

计算机图形学实验报告03

glVertex3f( 1.0f, -1.0f, -1.0f); // 四边形的左下

// 顶面

glColor3f(1,1,1);

glVertex3f(-1.0f, 1.0f, -1.0f); // 四边形的左上 glVertex3f(-1.0f, 1.0f, 1.0f); // 四边形的左下 glVertex3f( 1.0f, 1.0f, 1.0f); // 四边形的右下 glVertex3f( 1.0f, 1.0f, -1.0f); // 四边形的右上

// 底面

glColor3f(1,1,1);

glVertex3f(-1.0f, -1.0f, -1.0f); // 四边形的右上 glVertex3f( 1.0f, -1.0f, -1.0f); // 四边形的左上 glVertex3f( 1.0f, -1.0f, 1.0f); // 四边形的左下 glVertex3f(-1.0f, -1.0f, 1.0f); // 四边形的右下

// 右面

glColor3f(1,1,1);

glVertex3f( 1.0f, -1.0f, -1.0f); // 四边形的右下 glVertex3f( 1.0f, 1.0f, -1.0f); // 四边形的右上 glVertex3f( 1.0f, 1.0f, 1.0f); // 四边形的左上 glVertex3f( 1.0f, -1.0f, 1.0f); // 四边形的左下

// 左面

glColor3f(1,1,1);

glVertex3f(-1.0f, -1.0f, -1.0f); // 四边形的左下 glVertex3f(-1.0f, -1.0f, 1.0f); // 四边形的右下 glVertex3f(-1.0f, 1.0f, 1.0f); // 四边形的右上 glVertex3f(-1.0f, 1.0f, -1.0f); // 四边形的左上

glEnd();

glPopMatrix(); //弹出矩阵。

glutSwapBuffers(); //交换缓冲区。显示图形}

六.实验收获

8

更多相关推荐:
计算机图形学实验报告

福建农林大学计算机与信息学院课程名称姓名系专业年级学号指导教师职称实验报告计算机图形学洪世玉计算机计算机科学与技术10级102260010072李小林20xx年11月19日实验项目列表福建农林大学计算机与信息学...

计算机图形学实验报告及代码

第1章概述一教学目标通过本章的学习使学生能够了解计算机图形学的基本概念研究内容当前的发展概况本门课程的特点和应用二教学要求1了解计算机图形学的概念和研究内容2了解本门课程的发展概况三教学内容提要1计算机图形学的...

计算机图形学实验报告

计算机图形学实验报告河南理工大学测绘学院计算机图形学实验报告学号姓名成绩评语交报告日期20xx年6月25日计算机图形学实验报告实验项目一图形学光栅化算法验证实验实验日期20xx年6月5日一实验目的1加强对直线圆...

计算机图形学实验报告

实验报告实验课程:计算机图形学学生姓名:XXXX学号:XXXX专业班级:软件20##年12月25日目录i.实验一矩阵变换ii.实验二图形绘制iii.实验三曲线的生成算法实现iv.实验四二维基本图形生成的算法v.…

计算机图形学实验报告

班级10计科姓名敖智挺学号20xx30457117实验一直线生成与二次曲线拟合实验内容应用Bresenham画线算法实现一程序完成直线生成实验目的了解掌握VC下D图元的扫描转换原理及VC实现掌握图元属性原理及V...

计算机图形学实验报告

计算机图形学实验报告学号20xx2115姓名班级计算机2班指导老师何太军20xx619实验一Windows图形程序设计基础1实验目的1学习理解Win32应用程序设计的基本知识SDK编程2掌握Win32应用程序的...

计算机图形学实验报告2

计算机图形学实验报告实验名称区域填充算法和裁剪算法实验四区域填充算法一实验目的及要求1掌握区域填充的基本算法原理2会使用字符的图形输出3实践与巩固区域填充的基本生成算法4掌握这些算法的原理及实现二理论基础1了解...

计算机图形学实验报告一

实验一直线圆椭圆的生成算法一实验目的与内容目的利用实验使我对所学的图形生成算法加深印象并且练习书写规范的实验报告格式1了解VC编程环境中常用控件命令和绘图函数掌握处理图形的基本方法2实现直线生成算法数值微分法中...

计算机图形学实验报告2

学号计算机图形学实验报告实验二图形几何变换过程的设计学专指成生业导姓班教名级师绩电子与信息工程系20xx年4月12日天津城市建设学院设计性实验任务书班姓名学号课程名称计算机图形学设计题目图形几何变换过程的设计完...

计算机图形学实验报告 (2)

实验一Window图形编程基础一实验类型验证型实验二实验目的1熟练使用实验主要开发平台VC602掌握如何在编译平台下编辑编译连接和运行一个简单的Windows图形应用程序3掌握Window图形编程的基本方法4学...

计算机图形学实验报告

计算机图形学上机实验报告计算机科学与技术学院班级学号姓名指导教师完成日期20xx年12月6日目录实验一Kock曲线的生成311实验目的与要求31实验目的32实验要求312实验内容31实验原理32实验内容43实验...

计算机图形学实验报告—正文

山东科技大学学生课程设计设计1环境设置实验环境microsoftvisualstudio20xx一实验目的1掌握图形驱动程序及图形模式的基本概念掌握图形初始化方法2掌握进行图形程序设计的基本方法3了解的图形功能...

计算机图形学实验报告(45篇)