首页 分享 计算机图形学 Phong光照模型实验(OpenGL的基本使用)

计算机图形学 Phong光照模型实验(OpenGL的基本使用)

来源:花匠小妙招 时间:2024-11-20 07:05

一、实验实习目的及要求

目的:

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的方程
下一篇: 打造绿色家园,家庭养花记录表,科

推荐分享