计算机图形学 Phong光照模型实验(OpenGL的基本使用)
一、实验实习目的及要求
目的:
1、理解光照模型,特别是phong简单光照模型原理,会用OpenGL绘制具有明暗效果的简单三维图形;
2、了解简单的交互式技术,用户可以简单控制图形。
要求:
使用OpenGL绘制一个简单的三维图形,例如立方体,球;2.为该图形添加光照,使其具有明暗效果;
3.添加鼠标消息函数,用户可以通过鼠标浏览该三维图形;
二、实验实习设备(环境)及要求(软硬件条件)
1.高性能微机;
2.有基本的图形I/O设备;
3.有相应的配套软件,可视化程序设计环境;
三、实验实习内容与步骤
实验内容:
用OpenGL绘制一个简单的三维图形球,并且使用phong光照模型模拟物体表面对光的反射作用。
实验步骤:
1.算法、原理清晰,有详细的设计步骤;
2.依据算法、步骤或程序流程图,用C++语言编写源程序;
3.编辑源程序并进行调试;
4.进行运行测试,并结合情况进行调整;
5.对运行结果进行保存与分析;
6.打印源程序或把源程序以文件的形式提交;
7.按格式书写实验报告。
四、实验实习过程或算法(源程序、代码)
#include "windows.h"
#include <gl/glut.h>
#define SCREEN_WIDTH 480
#define SCREEN_HEIGHT 480
static int spin = 0;
void init(void)
{
GLfloat mat_specular[] = {0.0, 1.0, 1.0, 1.0};
GLfloat mat_shininess[] = {50.0};
GLfloat light_position[] = {7.0, 7.0, 1.0, 0.0};
GLfloat light_ambient[] = {5.0, 0.0, 5.0, 0.0};
GLfloat white_light[] = {1.0, 1.0, 1.0, 1.0};
GLfloat lmodel_ambient[] = {0.5, 0.5, 0.5, 5.0};
glClearColor(0.0, 0.0, 0.0, 0.0);
glShadeModel(GL_SMOOTH);
glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular);
glMaterialfv(GL_FRONT, GL_SHININESS, mat_shininess);
glLightfv(GL_LIGHT0, GL_POSITION, light_position);
glLightfv(GL_LIGHT0, GL_AMBIENT, light_ambient);
glLightfv(GL_LIGHT0, GL_DIFFUSE, white_light);
glLightfv(GL_LIGHT0, GL_SPECULAR, white_light);
glLightModelfv(GL_LIGHT_MODEL_AMBIENT, lmodel_ambient);
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
glEnable(GL_DEPTH_TEST);
}
void display(void)
{
GLfloat light_position[] = {1.0, 1.0, 1.0, 0.0};
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPushMatrix();
gluLookAt(0.0, 0.0, 5.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);
glPushMatrix();
glRotatef(spin, 1.0, 0.0, 0.0);
glLightfv(GL_LIGHT0, GL_POSITION, light_position);
glTranslatef(0.0, 0.0, 1.5);
glDisable(GL_LIGHTING);
glEnable(GL_LIGHTING);
glPopMatrix();
glBegin(GL_QUADS);
glColor3f(1.0, 0.0, 0.0);
glVertex3f(-0.5, -0.5, 0.5);
glVertex3f(0.5, -0.5, 0.5);
glVertex3f(0.5, 0.5, 0.5);
glVertex3f(-0.5, 0.5, 0.5);
glColor3f(0.0, 1.0, 0.0);
glVertex3f(-0.5, -0.5, -0.5);
glVertex3f(0.5, -0.5, -0.5);
glVertex3f(0.5, 0.5, -0.5);
glVertex3f(-0.5, 0.5, -0.5);
glColor3f(0.0, 0.0, 1.0);
glVertex3f(-0.5, -0.5, 0.5);
glVertex3f(-0.5, 0.5, 0.5);
glVertex3f(-0.5, 0.5, -0.5);
glVertex3f(-0.5, -0.5, -0.5);
glColor3f(1.0, 1.0, 0.0);
glVertex3f(0.5, -0.5, 0.5);
glVertex3f(0.5, 0.5, 0.5);
glVertex3f(0.5, 0.5, -0.5);
glVertex3f(0.5, -0.5, -0.5);
glColor3f(1.0, 0.0, 1.0);
glVertex3f(-0.5, 0.5, 0.5);
glVertex3f(0.5, 0.5, 0.5);
glVertex3f(0.5, 0.5, -0.5);
glVertex3f(-0.5, 0.5, -0.5);
glColor3f(0.0, 1.0, 1.0);
glVertex3f(-0.5, -0.5, 0.5);
glVertex3f(0.5, -0.5, 0.5);
glVertex3f(0.5, -0.5, -0.5);
glVertex3f(-0.5, -0.5, -0.5);
glEnd();
glPopMatrix();
glFlush();
}
void mouse(int button, int state, int x, int y)
{
switch (button)
{
case GLUT_LEFT_BUTTON:
if (state == GLUT_DOWN)
{
spin = (spin + 10) % 360;
glutPostRedisplay();
}
break;
case GLUT_RIGHT_BUTTON:
if (state == GLUT_DOWN)
{
spin = (spin - 10) % 360;
glutPostRedisplay();
}
break;
default:
break;
}
}
void reshape(int w, int h)
{
glViewport(0, 0, (GLsizei) w, (GLsizei) h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
if (w < h)
{
glOrtho(-1.5, 1.5, -1.5 * (GLfloat) h / (GLfloat) w,
1.5 * (GLfloat)h / (GLfloat)w, -10.0, 10.0);
}
else
{
glOrtho(-1.5 * (GLfloat) h / (GLfloat) w,
1.5 * (GLfloat) h / (GLfloat) w,
-1.5, 1.5, -10.0, 10.0);
}
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}
int main(int argc, char* argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE|GLUT_DEPTH);
glutInitWindowSize(SCREEN_WIDTH, SCREEN_HEIGHT);
glutInitWindowPosition(50, 100);
glutCreateWindow("立方体");
init();
glutDisplayFunc(&display);
glutReshapeFunc(&reshape);
glutMouseFunc(&mouse);
glutMainLoop();
return 0;
}
五、实验实习结果分析和(或)源程序调试过程
相关知识
技术实现模型
计算机经典书籍电子书合集(适合计算机学生学习以及程序员笔试、面试)
OpenGL 画荷花
虚拟植物范文6篇(全文)
基于Perlin噪声的花卉仿真算法研究
大学计算机实验报告范文
计算机最早的设计师应用于,计算机辅助园林设计的应用与优缺点
计算机辅助园林设计考试题,计算机辅助园林设计的应用与优缺点
树木花卉形态建模研究
计算机辅助园林规划设计
网址: 计算机图形学 Phong光照模型实验(OpenGL的基本使用) https://www.huajiangbk.com/newsview620907.html
上一篇: 若关于x的方程 |
下一篇: 打造绿色家园,家庭养花记录表,科 |
推荐分享

- 1君子兰什么品种最名贵 十大名 4012
- 2世界上最名贵的10种兰花图片 3364
- 3花圈挽联怎么写? 3286
- 4迷信说家里不能放假花 家里摆 1878
- 5香山红叶什么时候红 1493
- 6花的意思,花的解释,花的拼音 1210
- 7教师节送什么花最合适 1167
- 8勿忘我花图片 1103
- 9橄榄枝的象征意义 1093
- 10洛阳的市花 1039