实验十三3DS模型的显示new解析

上传人:我** 文档编号:114624110 上传时间:2019-11-12 格式:DOC 页数:20 大小:757KB
返回 下载 相关 举报
实验十三3DS模型的显示new解析_第1页
第1页 / 共20页
实验十三3DS模型的显示new解析_第2页
第2页 / 共20页
实验十三3DS模型的显示new解析_第3页
第3页 / 共20页
实验十三3DS模型的显示new解析_第4页
第4页 / 共20页
实验十三3DS模型的显示new解析_第5页
第5页 / 共20页
点击查看更多>>
资源描述

《实验十三3DS模型的显示new解析》由会员分享,可在线阅读,更多相关《实验十三3DS模型的显示new解析(20页珍藏版)》请在金锄头文库上搜索。

1、实验十三 3DS模型的显示一、实验目的1 实现3DS模型在程序中的显示与漫游2 实现MDL模型在程序中的显示与漫游3 了解3DS模型尺寸与OpenGL绘图坐标之间的关系二、实验环境 硬件要求:PC机,主流配置,最好为独立显卡,显存512M以上。 软件环境:操作系统:Windows XP。语言开发工具:Microsoft Visual studio 2005/2008,Visual C+。三、实验内容与要求:要求: 实验所有步骤所生成的效果截图拷贝到实验报告文档里备查,并附上相应的代码。 WORD文档命名方式:学号姓名-实验序号-实验名称。 内容:1. 铲车模型显示程序 图1 铲车模型程序效果仔

2、细研读程序,修改程序,将模型放入上次实验的场景中在场景中尝试添加其他模型,并查看效果1 如果屏蔽深度检测代码,模型显示会怎样变化?2. 模型的纹理对场景的效果会有影响吗? 提供的模型(参见实验文件夹3DSModel):1 汽车(分普通轿车和宝马车)2 飞机3 铲车(如发现贴图有问题,请立即告诉老师,同学们也可自行到网上搜寻模型)五、设置参考1) 3DS 模型导入设置1 工程文件准备1) 添加头文件#include 3ds.h#include texture.h2) 添加源程序 3ds.cpp,texture.cpp2 主程序修改步骤1 变量定义 C3DSModel draw3ds5; /有多少

3、个模型,数组就定义多大2 / 调入模型文件 一般设置init()中,例如draw3ds0.Load(“car.3ds”);draw3ds1.Load(“house.3ds”);/ 模型调入后,位置处在世界坐标系的原点3 /显示 写在显示回调函数Display()中glEnable(GL_LIGHTING); /启用光源 glEnable(GL_TEXTURE_2D); /启用纹理/ 通过图形变换使得模型原来的尺寸和世界坐标系得尺寸保持一致 图形变换glScalef(x,y,z); draw3ds0.Render(); /显示模型1draw3ds1.Render(); /显示模型2glDisab

4、le(GL_LIGHTING); /使用后关闭光源 glDisable(GL_TEXTURE_2D); /使用后关闭纹理4 / 释放资源,释放内存 draw3ds0.Release(); draw3ds1.Release();6注意:要启用深度检测六、思考题哪几个因素影响3DS模型的显示效果?如果想调用不同大小的模型都能在同一个程序正确地显示,程序应该怎样修改?七、加分题 在网上查找模型或者自己设计模型,调入自己设计的带光照的3D新场景(须有OpenGL绘制的其他物体)中。八、演示程序1)3DSModel_chanche.exe /3DS模型铲车效果演示九、附属程序1.铲车模型显示主程序 3D

5、S Model(带mp3音乐播放功能)#include stdafx.h#include #include #include 3ds.h#include Texture.h#include #include fmod.h / 音频库的头文件#pragma comment(lib, fmodvc.lib) /音频库的静态链接库FSOUND_STREAM *mp3back;void init(void);void Display(void);void Keyboard(int key,int x,int y);void draw3DSModel();void Reshape(GLsizei w,G

6、Lsizei h);void myidle();C3DSModel draw3ds5; /有多少个模型,数组就定义多大float eyex=0,eyey=0,eyez=100,atx=0,aty=0,atz=0;float rotatex,rotatey;int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow)UNREFERENCED_PARAMETER(hPrevInstance);UNREFERENCED_PARAMETER(lpCmdLine);

7、 char *argv = hello , ;int argc = 2; / must/should match the number of strings in argvglutInit(&argc, argv); /初始化GLUT库;glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB); /设置显示模式;(缓冲,颜色类型)glutInitWindowSize(500, 500);glutInitWindowPosition(1024 / 2 - 250, 768 / 2 - 250);glutCreateWindow(3D-cube texture); /

8、创建窗口,标题为“Rotating 3D World”; glutReshapeFunc(Reshape);init();glutDisplayFunc(Display); /用于绘制当前窗口;glutIdleFunc(myidle);glutMainLoop(); /表示开始运行程序,用于程序的结尾;return 0;void init()/ 调入模型文件 一般设置init()中,例如 draw3ds0.Load(chanche.3ds); glClearColor(1,1,1,1);glEnable(GL_DEPTH_TEST); / 启用深度测试if (FSOUND_Init(44100

9、, 32, 0)/ 把声音初始化为khz/ 载入文件bgmusic.mp3mp3back = FSOUND_Stream_OpenFile(1.mp3, FSOUND_LOOP_NORMAL, 0);FSOUND_Stream_Play(FSOUND_FREE,mp3back);void Display(void)glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);glMatrixMode(GL_MODELVIEW);glLoadIdentity(); gluLookAt(eyex,eyey,eyez,atx,aty,atz,0,1,0);glRo

10、tatef(rotatex,1,0,0);glRotatef(rotatey,0,1,0);glScalef(0.5,0.5,0.5);draw3DSModel(); /绘制玩物glutSwapBuffers();void draw3DSModel() glEnable(GL_TEXTURE_2D);glPushMatrix();draw3ds0.Render();glPopMatrix(); glDisable(GL_TEXTURE_2D);void specialkeyboard(int key, int x, int y)if(key=GLUT_KEY_UP)eyey+=5; aty+=

11、5; if(key=GLUT_KEY_DOWN) eyey-=5; aty-=5;glutPostRedisplay();void Keyboard(unsigned char key,int x,int y)switch(key) case w:eyez-=5;atz-=5;break;case s:eyez+=5;atz+=5;break;case a:/eyex-=5;eyex-=5;atx-=5;break;case d:/eyex+=5;eyex+=5;atx+=5;break;glutPostRedisplay();void Reshape(GLsizei w,GLsizei h)

12、glMatrixMode(GL_PROJECTION);glLoadIdentity();gluPerspective(90,w/h,2,2500);glViewport(0,0,w,h);glMatrixMode(GL_MODELVIEW);glLoadIdentity();void myidle()Sleep(100); rotatex+=0.1; rotatey+=0.1; glutPostRedisplay();2读取3DS模型程序 3ds.cpp#include stdafx.h#include 3ds.h#include Texture.h#includeglaux.h / 构造函

13、数C3DSModel:C3DSModel()/ 初始化文件指针m_FilePtr = NULL;/ 定义一个默认的材质(灰色)tMaterial defaultMat;defaultMat.isTexMat = false;strcpy(defaultMat.matName.string, 5DG_Default);defaultMat.color0 = 192;defaultMat.color1 = 192;defaultMat.color2 = 192;m_3DModel.pMaterials.push_back(defaultMat);/ 初始化保存DS模型的结构体m_3DModel.numOfMaterials = 1;m_3DModel.numOfObjects = 0;/ 析构函数C3DSModel:C3DSModel()m_3DModel

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号