资源简介
设计一个室内三维环境, 并利用OPEN GL展示它的三维效果。要求:
(1)包含基本的实体元素:球、多面体、锥体、柱体、曲面等;
(2)有全局光照效果和纹理功能;
(3)程序具有交互功能。
代码片段和文件信息
#include
#include
#include
#include
#include
#include
#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); //第一个光源
glShadeModel(GL_SMOOTH);
glEnable(GL_DEPTH_TEST); //删除隐藏的表面
glEnable(GL_NORMALIZE); //将阴影向量正则化
glClearColor(1.0f 1.0f 1.0f 0.0f);
//设置表面材料的属性
GLfloat mat_ambient[] = {0.6f0.6f0.6f1.0f};
GLfloat mat_diffuse[] = {0.5f0.5f0.5f1.0f};
GLfloat mat_specular[] = {1.0f1.0f1.0f1.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)
{
glPushMatrix();
glTranslated(1.2 0.01 1.2);
glScaled(2.4 0.02 2.4);
glutSolidCube(1.0);
glPopMatrix();
}
//函数功能:绘制立方柱体
void DrawPillar(void)
{
glPushMatrix();
glTranslated(0 0.15 0);
glScaled(0.02 0.3 0.02);
glutSolidCube(1.0);
glPopMatrix();
}
//函数功能:绘制桌子
void DrawTable(void)
{
glPushMatrix();
glTranslated(0.05 0.3 0.05);
glScaled(0.6 0.02 0.6);
glutSolidCube(1.0); //绘制桌面
glPopMatrix();
glPushMatrix();
glTranslated(0.275 0 0.275);
DrawPillar(); //绘制桌腿
glTranslated(0 0 -0.45);
DrawPillar(); //绘制桌腿
glTranslated(-0.45 0 0.45);
DrawPillar(); //绘制桌腿
glTranslated(0 0 -0.45);
DrawPillar(); //绘制桌腿
glPopMatrix();
}
//函数功能:绘图
void RenderScene(void)
{
//设置光源属性
GLfloat light_position[]={2.0f 6.0f 3.0f 0.0f};
glLightfv(GL_LIGHT0GL_POSITIONlight_position);
glMatrixMode(GL_PROJECTION);//后继操作都在投影变换范围内
glLoadIdentity(); //设置当前矩阵为单位矩阵
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 7331 2010-06-23 20:09 My Indoor2.cpp
文件 6885 2010-06-22 02:10 My Indoor.cpp
----------- --------- ---------- ----- ----
14216 2
相关资源
- VS2012OpenGL配置所需要的全部libdllh文件
- 基于OpenGL的仿蝗虫机器人三维动态仿
- 图形学 - OpenGL实现3种三维茶壶显示源
- opengl程序-会跳舞的骷髅
- opengl实现三维网格光顺Laplacian算法
- opengl——爆炸
- OpenGL三维地形建模
- opengl游戏编程徐明亮版(含源码)
- 用OPENGL画的一个简单的直升飞机
- opengl完美天空盒
- 3D绘图程序设计:使用Direct3D 10/9和Ope
- OpenGL绘制可运动自行车源程序.zip
- OpenGL实现飘动效果
- opengl室内场景的绘制,包括碰撞检测
- OpenGL场景漫游
- 用opengl实现的太阳系模型
- OpenGL 3D贪吃蛇程序,很小
- OpenGL爆炸碎片化效果 源码
- OpenGL三茶壶三光源光源绕着茶壶旋转
- 10个OpenGL的源码
- vc写的一个游戏里面三维场景漫游
- OpenGL实现的简单游戏引擎
- OpenGL游戏程序设计源码
- glew最新版本glew1.11.0
- OpenGL 火箭
- 天空盒和地面
- 三维场景漫游.zip
- openGL实现的正方体六面贴图
- opengl简易翻牌游戏
- Qt Openglwidget 显示图片纹理贴图
评论
共有 条评论