资源简介
试设计一个室内三维环境, 并利用OPENGL展示它的三维效果。要求:(1)包含基本的实体元素:球、多面体、锥体、 柱体、曲面等;(2)有全局光照效果和纹理功能;(3)程序具有交互功能。
代码片段和文件信息
#include
#include
#include
#include
#include
#include
static GLubyte checkImage[128][128][4];
static GLuint texName;
static GLfloat xrot = 0;
static GLfloat yrot = 0;
void Initial(void); //初始化
void floor(void); //绘制地面纹理
void table(void); //绘制桌子
void chair(void); //绘制椅子
void wall(void); //绘制墙壁
void pillar(void); //绘制柱体
void keyboard(int key int x int y); //处理键盘输入,用于交互
void sizeChange(int w int h); //改变窗口大小
void build(void); //构建室内三维模型
//主函数
void main()
{
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH);
glutInitWindowSize(960 720); //设置窗口大小
glutInitWindowPosition(500 100); //设置窗口位置
glutCreateWindow(“室内三维环境opengl-2015110749“); //创建名为“室内三位环境“的窗口
Initial();
glutDisplayFunc(build); //构建模型
glutReshapeFunc(sizeChange); //处理窗口大小变化
glutSpecialFunc(keyboard); //处理按键交互信息
glutMainLoop(); //处理交互事件
}
//初始化
void Initial(void)
{
glEnable(GL_LIGHTING); //启动光源
glEnable(GL_LIGHT0);
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); //镜面反射光的会聚强度
floor(); //绘制地面纹理图案
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 128
128 0 GL_RGBA GL_UNSIGNED_BYTE checkImage);
}
//绘制地面纹理图案
void floor(void)
{
int i j cd;
for (i = 0; i < 128; i++) {
for (j = 0; j < 128; j++) {
c = ((((i & 0x10) == 0) ^ ((j & 0x8)) == 0)) *255;
d = ((((i & 0x16) == 0) ^ ((j & 0x16)) == 0)) * 155;
checkImage[i][j][0] = (GLubyte)250;//R
checkImage[i][j][1] = (GLubyte)d;//G
checkImage[i][j][2] = (GLubyte)c;//B
checkImage[i][j][3] = (GLubyte)255;//alpha
}
}
}
//绘制墙壁
void wall(void)
{
glPushMatrix();
glTranslated(1.2 0.01 1.2);
glScaled(2.4 0.02 2.4);
glutSolidCube(1.0);
glPopMatrix();
}
//绘制立方柱体
void pillar(void)
{
glPushMatrix();
glTranslated(0 0.15 0);
glScaled(0.02 0.3 0.02);
glutSolidCube(1.0);
glPopMatrix();
}
//绘制桌子
void table(void)
{
//绘制桌面
glPushMatrix();
glTran
相关资源
- 交互式计算机图形学 第六版 OpenGL源代
- 图形学简单绘图系统
- 北邮-编译原理-词法分析
- 北邮高级计算机体系结构记分牌程序
- [BUPT]面向对象程序设计C++ - 平时作业
- OpenGL迷宫山东大学图形学实验三
- 计算机图形学走样反走样时钟
- c++QT5图形学-中点画圆完整工程文件
- 足球俱乐部管理系统——北邮c++2课程
- 西北工业大学软件学院计算机图形学
- 计算机图形学实验源代码中南民族大
- 图形学各种曲线--Bezier曲线,B-样条曲
- 鼠标交互画圆及椭圆基于Bresenham、中
- 绘制任意斜率的直线段
- QSplat:基于点绘制的图形学开山之作
- 北邮C++小学期坦克大战代码及报告
- 计算机图形学简单CAD系统
- 真实感图形学
- 计算机图形学多边形种子填充算法
- 计算机图形学 消隐
- 计算机图形学作业,中点算法画椭圆
- MFC中点圆的生成算法
- 改进的有效边表算法--计算机图形学
- 最好的CS游戏opengl、C++实现
- 梁友栋-直线裁剪算法图形学mfc
- 计算机图形学 清华大学教材 及 vc++
- 北邮SQL实验四实验报告
- 孔令德的计算机图形学实验及课程设
- 图形学消隐
- 计算机图形学大作业参考代码(VC版)
评论
共有 条评论