游戏开发论坛

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

懂解析3DS文件头0X4160处理的朋友进!请教!

[复制链接]

1

主题

4

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2009-9-3 09:44:00 | 显示全部楼层 |阅读模式
各位技术GG,MM.
最近我小弟在DIRECT3D环境下渲染一高架桥的3DS文件(该文件包含很多的网格信息)出现问题。问题描述如下:
     我现在已经解析出顶点网格信息,顶点索引信息,材质信息,摄像机,灯光,通过D3D直接MESH出模型,模型大体的样子已经呈现出来,但是有部分对象发生整体偏移(如护拦,楼底,窗户等)。导致该问题的原因现基本定位在0X4160(局部转换矩阵)这个块信息里面,0X4160是一个4*3的浮点矩阵,我对这个矩阵试过多种操作方法还是不行,有哪个遇到类似问题的朋友该知道如何使用0X4160的操作方法?
       这个问题已经卡了好几天,郁闷的很,小弟我在线等 。

1

主题

4

帖子

0

积分

新手上路

Rank: 1

积分
0
 楼主| 发表于 2009-9-3 10:04:00 | 显示全部楼层

Re: 懂解析3DS文件头0X4160处理的朋友进!请教!

  先自己顶起来 。
   我自己参照3DSLIB开源库的写的处理方法也是不行,而且我对这个库的转化方法感觉有点问题:
  其中3DSLIB方法如下:
    float inv_matrix[4][4], M[4][4];
    lib3ds_matrix_copy(inv_matrix, mesh->matrix);//mesh->matrix就是该3DS读取的转换矩阵。其中,U,V,N,0按行存储
    float tmp[3];
    lib3ds_matrix_inv(inv_matrix);//求转换矩阵的逆矩阵
    lib3ds_matrix_copy(M, mesh->matrix);
    lib3ds_matrix_scale(M, -1.0f, 1.0f, 1.0f);//将M矩阵的第一行取反
    lib3ds_matrix_mult(M, M, inv_matrix);//M=M*inv_matrix; M即为最后的转换矩阵

   for (i = 0; i < mesh->nvertices; ++i) {
            lib3ds_vector_transform(tmp, M, mesh->vertices);//对顶点进行转化
            lib3ds_io_write_vector(io, tmp);
        }

我觉得他的问题在于:
M是最后求得的转化矩阵。现在对M进行数学推导:
     M=M*inv_matrix  --->M= -1*(mesh->matrix)*inv_matrix; 其中-1为一对角矩阵,a00为-1,其他对角元素全为1. inv_matrix与mesh->matrix互为逆矩阵
       -----------》M=-1*1=-1(-1为一对角矩阵,a00为-1,其他对角元素全为1)
那么这个最终M矩阵就是这么一个对角矩阵,这个变化矩阵的作用就是使顶点数据的x坐标全部取反而已。
如果仅仅这么做,那也没必要如此费力的推出M。
还是我理解有错。
        需要大家的点拨。。
    小弟急啊


                              

54

主题

2917

帖子

3765

积分

论坛元老

Rank: 8Rank: 8

积分
3765
QQ
发表于 2009-9-3 11:24:00 | 显示全部楼层

Re: 懂解析3DS文件头0X4160处理的朋友进!请教!

hl_neo: 懂解析3DS文件头0X4160处理的朋友进!请教!

模型大体的样子已经呈现出来,但是有部分对象发生整体偏移(如护拦,楼底,窗户等)。...


你可能遇到了镜像复制出来的物体,对于这种物体得在求逆矩阵后还要再用“D3DXMatrixReflect”翻转一下。

1

主题

4

帖子

0

积分

新手上路

Rank: 1

积分
0
 楼主| 发表于 2009-9-3 12:09:00 | 显示全部楼层

Re: 懂解析3DS文件头0X4160处理的朋友进!请教!

Jeminai 你好 。谢谢 我马上调试下  
你能给我你的联系方式么 或者你加上我的277048638
  我好好请教下你 这样方便。
   可以吗

1

主题

4

帖子

0

积分

新手上路

Rank: 1

积分
0
 楼主| 发表于 2009-9-3 12:13:00 | 显示全部楼层

Re: 懂解析3DS文件头0X4160处理的朋友进!请教!

D3DXMatrixReflect这个问题就复杂了 ,我现在连反射平面都很难找到。
3DS文件似乎没有反射平面的块信息。 Jeminai兄 ,现在该怎么办

54

主题

2917

帖子

3765

积分

论坛元老

Rank: 8Rank: 8

积分
3765
QQ
发表于 2009-9-3 18:20:00 | 显示全部楼层

Re:懂解析3DS文件头0X4160处理的朋友进!请教!

一般我默认用这个平面D3DXPLANE(1,0,0,0)的基本也万事OK,分析一下你读取出来的矩阵数据是可以看出他是个镜像物体的。
详细的你自己仔细的去慢慢分析,这块就这点参数没你想得那么复杂。
我的3DS读取类是自己写的,跟你的完全不一样,没什么好沟通的。
另外,通常建模的时候,我也都是尽量避免使用镜像物体的。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-6-21 01:37

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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