max是3dsMAX里的专有文件格式;3ds是通用的3D格式文件,可以导入多种三维文件,可以说是保存3D模型的一个标准文件格式。3ds文件的结构比较复杂,要弄清楚不容易;但是如果只是导入3ds,实现读取和显示并不复杂,最快的方法当然是利用写好了的函数进行直接调用:
1. 先在3DMAX里把模型做好,注意模型的材质要用贴图的方式,OpenGL里不支持多维材质(OpengGL里贴图丢失一般是这个原因);把模型坍塌成polygon,再导出成.3ds格式,把贴图文件(bmp或jpg格式),3ds文件放到你的VC++工程目录下;
2. 2.网上用很多3ds导入的例子,可以一个用来参考;里面一般会有两个函数:?
3. void Show3DS(); //显示3ds模型
4. void Load3DS(); //加载3ds模型
5. 把头文件和.cpp 包含到你的工程里,根据具体的定义参数来调用
首先将漫游放在一边,说说导入3d模型。opengl并没有提供什么方便的函数一次性将模型导入到程序,他也没法做,现在的模型格式很多,有的都快被淘汰了,但还是有人在用。如果你想将模型导入到程序,不妨先试试3ds格式的,我以前就试过。你在网上可以搜到很多导入3ds格式模型的代码,通常他们都不是很完美,你需要对他们进行修改,以支持纹理和动画。
md2格式的模型也不错,可以查到相关资料。主要还是得了解保存的模型文件的存储方式,然后读取并组织显示。
再说漫游,刚学directx时也是这样,我不知道如何让自己在场景中跑起来,于是使用平移,将场景移动,而摄像机不动,这样顶点都要进行矩阵计算,反应很卡。后来改用移动摄像头的方法,用opengl的函数就是glulookat(),调节前6个参数就可以了。
会修改摄像头还不够,必须要绘制出起伏的地形,并能实时得到摄像头垂直下方地形的高度以正确放置摄像头的y坐标。一般你可以通过一张raw图片来得到整个地面的每个点的y坐标,及高度,raw图片是8位的,0~255之间定义opengl的y范围,当然可以乘上一个比例系数进行缩放。具体可以在网上搜到地形的实现方法。
如果还有不懂得可以问我~
Photoshop|
Dreamweaver|
SVG|
WebGL|
Visual Studio|
PowerDesigner|
Eclipse|
Git|
Apache Ant|
Atom|
Composer|
CodeSmith|
Flex|
Gradle|
Maven|
Sublime Text3|
SVN|
Tableau|
Vim|
Chrome开发者工具|
OpenGL|
Unity|
Direct3D|
用户登录
还没有账号?立即注册
用户注册
投稿取消
文章分类: |
|
还能输入300字
上传中....