游戏开发论坛

 找回密码
 立即注册
搜索
查看: 5605|回复: 5

问一下3ds文件导入的流程

[复制链接]

7

主题

12

帖子

18

积分

新手上路

Rank: 1

积分
18
发表于 2005-5-26 12:45:00 | 显示全部楼层 |阅读模式
     也就是算法,研究了几天源代码,感觉只能获得大概的印象,对于整个流程,先做什么后做什么感觉还是比较模糊。
     在线等,非常感谢 [em14]

42

主题

334

帖子

344

积分

中级会员

Rank: 3Rank: 3

积分
344
发表于 2005-5-26 18:19:00 | 显示全部楼层

Re:问一下3ds文件导入的流程

    调入并显示3DS模型有一套复杂的算法,鉴于本书的宗旨我们不在这里详细讲解它。现在的编程技术也允许我们对一些复杂算法过程隐去,只了解它的应用方法这行了。就像我们现在用的OpenGL一样,每条OpenGL函数都有一个算法,我们只要掌握它怎么用,不用去了解它的具体实现方法一样。
    在本书的配套光盘“源程序\include” 目录下有“3DS.CPP” 、“3DS.H” 文件,其中就是调入并显示3DS模型文件的算法。这些算法是在“3DS” 的类文件中,类名为“CLoad3DS” 。
    只要我们在调用它的类文件(baiscobj) 的头文件“baiscobj.h” 中:
引用  #include "../include/3DS.H"
并定义类名  CLoad3DS* m_3ds;
    在baiscobj.cpp中我们就可以使用“CLoad3DS” 类中的功能函数了。
在3DS类里我们主要用到两个功能。
调入3DS模型文件void Init(char *filename,int j)
入口参数:char * filename                3DS文件名
                  int j                                        序号(调入的第几个模型)
显示3DS模型void show3ds(int j0,float tx,float ty,float tz,float size)
入口参数:int j0                                序号(调入的第几个模型)
                  float tx,ty,tz                模型的显示位置
                  float size                        模型的大小比率(值越大,显示图像起大)

7

主题

12

帖子

18

积分

新手上路

Rank: 1

积分
18
 楼主| 发表于 2005-5-26 19:35:00 | 显示全部楼层

Re: 问一下3ds文件导入的流程

谢谢,其实我主要就是想搞懂具体的导入和显示是怎么实现的,3ds.cpp里的函数大概能看懂,但是没有一个总体清晰的流程。
斑竹辛苦了 [em5]

7

主题

12

帖子

18

积分

新手上路

Rank: 1

积分
18
 楼主| 发表于 2005-5-26 20:00:00 | 显示全部楼层

Re: 问一下3ds文件导入的流程

又看了一下觉得是对 show3ds函数没有理解,现在感觉好多了:)
主要实现是:
对模型中的每一个模块:
{
  如果有纹理使能纹理映射;
  对模块的每一个面:
  {
    对面的每个顶点
    {
      求出法向;
      如果有纹理glTexCoord2f纹理;
    }
  }
}
是这样吗

22

主题

54

帖子

60

积分

注册会员

Rank: 2

积分
60
发表于 2005-6-5 00:15:00 | 显示全部楼层

Re:问一下3ds文件导入的流程

问一下唐老大:
                     你说的3DS.CPP,3DS.H是你自己写的还是装了VC++6.0就有的,还有那个函数是你写的还是Microsoft写的?

42

主题

334

帖子

344

积分

中级会员

Rank: 3Rank: 3

积分
344
发表于 2005-6-5 09:13:00 | 显示全部楼层

Re:问一下3ds文件导入的流程

凡是在include目录下的程序都不是我写的。现在网上这类好程序可多了。但有些有点小错误。3DS.CPP的原来程序在调入贴图时就有错。
// 遍历模型中所有的对象
for(int i = 0; i < g_3DModel[j0].numOfObjects; i++)
        {if(g_3DModel[j0].pObject.size() <= 0) break;// 如果对象的大小小于0,则退出
         t3DObject *pObject = &g_3DModel[j0].pObject;// 获得当前显示的对象
         if(pObject->bHasTexture)// 判断该对象是否有纹理映射
                 {        glEnable(GL_TEXTURE_2D);// 打开纹理映射
                        glBindTexture(GL_TEXTURE_2D, g_Texture[j0][pObject->materialID]);
                 }
         else        glDisable(GL_TEXTURE_2D);// 关闭纹理映射
//这里原来有错,不能正确调用模型的贴图,g_Texture应该为2维数组         
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-12-25 21:26

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表