OpenGL室内三维环境(北邮计算机图形学作业)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

O p e n G L室内三维环境(北邮计算机图形学作业)

-标准化文件发布号:(9456-EUATWK-MWUB-WUNN-INNUL-DDQTY-KII

计算机图形学第二次作业

姓名:

学号:

学院:

任课教师:

一.设计要求

试设计一个室内三维环境,并利用OPEN GL展示它的三维效果。要求:

(1)包含基本的实体元素:球,多面体,椎体,柱体,曲面等;

(2)有全局光照和纹理功能

(3)程序具有交互功能

二.交互说明

键盘的4个按键:

上键:视角上移

下键:视角下移

左键:视角左移

右键:视角右移

三.效果展示

四.程序代码

#include

#include

#include"glew.h"

#include"glut.h"

#include

#pragma comment (lib, "glew32.lib")

#define checkImageWidth 64

#define checkImageHeight 64

static GLubyte checkImage[checkImageHeight][checkImageWidth][4]; static GLuint texName;

static GLfloat xrot=0;

static GLfloat yrot=0;

//函数功能:绘制地面纹理图案

void makeCheckImage(void)

{

int i, j, c;

for (i = 0; i < checkImageHeight; i++) {

for (j = 0; j < checkImageWidth; j++) {

c = ((((i&0x16)==0)^((j&0x16))==0))*255;

checkImage[i][j][0] = (GLubyte) c;

checkImage[i][j][1] = (GLubyte) c;

checkImage[i][j][2] = (GLubyte) c;

checkImage[i][j][3] = (GLubyte) 255;

}

}

}

//函数功能:初始化

void SetupRC(void)

{

glEnable(GL_LIGHTING); //启用灯源

glEnable(GL_LIGHT0); //启用0号灯

glShadeModel(GL_SMOOTH); //设置光滑着色模式

glEnable(GL_DEPTH_TEST); //启用深度测试

glEnable(GL_NORMALIZE); //启用法向量

glClearColor(1.0f, 1.0f, 1.0f, 0.0f); //为色彩缓冲区指定用于清除的值

//设置表面材料的属性

GLfloat mat_ambient[] = {0.6f,0.6f,0.6f,1.0f};

GLfloat mat_diffuse[] = {0.5f,0.5f,0.5f,1.0f};

GLfloat mat_specular[] = {1.0f,1.0f,1.0f,1.0f,};

GLfloat mat_shininess[] = {40.0f};

glMaterialfv(GL_FRONT, GL_AMBIENT, mat_ambient); //指定环境泛光的强度

glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse); //漫反射的强度glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular); //镜面反射的强度

glMaterialfv(GL_FRONT, GL_SHININESS, mat_shininess); //镜面反射光的会聚强度

//纹理

makeCheckImage(); //绘制地面纹理图案glPixelStorei(GL_UNPACK_ALIGNMENT, 1); //控制像素存储模式

glGenTextures(1, &texName); //用来生成纹理的数量为1

glBindTexture(GL_TEXTURE_2D, texName); //绑定纹理

//纹理滤波,图象从纹理图象空间映射到帧缓冲图象空间

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, checkImageWidth,

checkImageHeight, 0, GL_RGBA, GL_UNSIGNED_BYTE, checkImage);

}

//函数功能:绘制墙壁

void DrawWall(void)

{

相关文档
最新文档