【3D技术宅公社】XR数字艺术论坛  XR技术讨论 XR互动电影 定格动画

 找回密码
 立即注册

QQ登录

只需一步,快速开始

调查问卷
论坛即将给大家带来全新的技术服务,面向三围图形学、游戏、动画的全新服务论坛升级为UTF8版本后,中文用户名和用户密码中有中文的都无法登陆,请发邮件到324007255(at)QQ.com联系手动修改密码

3D技术论坛将以计算机图形学为核心,面向教育 推出国内的三维教育引擎该项目在持续研发当中,感谢大家的关注。

查看: 2896|回复: 11

解析.X文件

[复制链接]
发表于 2009-6-4 17:56:24 | 显示全部楼层 |阅读模式

   请教两个问题:

    1. 就我所知, .X文件有两种格式:文本格式和二进制格式,那么这两种格式的.X文件在使用D3DX函数解析的过程有什么不同吗? 我自己在可以解析文本格式.X文件的程序中使用二进制格式的.X文件(就是论坛里面的那个熊猫),结果出错了。这是什么原因?

    2. 我们怎么知道要解析的.X文件里面的变换矩阵呢? 也就是说,我怎么知道应该使用什么样的世界矩阵、观察矩阵和投影矩阵来显示我的网格呢? 我看别人程序里的这三个矩阵都是写好的,但没有说明理由。 如果使用不当的矩阵,结果很有可能会显示不正常. 该怎么办?

   以上......

 楼主| 发表于 2009-6-6 11:22:57 | 显示全部楼层

哦,知道了.  但我是想写一个通用一点儿的能解析.X蒙皮动画的程序,可使用下面的变换解析出来的人物朝向总是不一样:

 // Setup world matrix
    D3DXMATRIXA16 matWorld;
    D3DXMatrixTranslation( &matWorld, -m_vObjectCenter.x,
                                      -m_vObjectCenter.y,
                                      -m_vObjectCenter.z );
//m_vObjectCenter是网格中心点的坐标

 

// 需要在这里旋转一下matWorld(针对不同的.X旋转量和轴都不一样,所以没法通用(就是使他们在开始显示的时候都面向我))

 

 //Setup view matrix

 D3DXMATRIXA16 matView;
    D3DXVECTOR3 vEye( 0, 0, -3*m_fObjectRadius );//m_fObjectRadius 网格半径
    D3DXVECTOR3 vAt( 0, 0, 0 );
    D3DXVECTOR3 vUp( 0, 1, 0 );
    D3DXMatrixLookAtLH( &matView, &vEye, &vAt, &vUp);

 

//Setup projection matrix

 D3DXMATRIXA16 matProj;
    D3DXMatrixPerspectiveFovLH( &matProj, D3DX_PI/4, 1.0,
                                m_fObjectRadius/64.0f, m_fObjectRadius*200.0f );

 

 

还有我的程序解析tiny没有问题(我可以针对tiny调整world matrix 使她面向我),但是解析熊猫(也要另外调整world matrix以使他面向我)的时候,Frame的矩阵更新(因为有的部分在正常运动,有的部分没有,所以我猜是矩阵更新问题)

总是有问题,我仔细对照微软的示例程序(用它解析熊猫没有任何问题),矩阵初始化和更新的部分(这应该算是关键,至少对于我出现的问题而言),和我的程序方法都是一样的。 所以现在很头痛.  所以还要再请教~~~

发表于 2009-6-4 22:40:24 | 显示全部楼层

1.文本格式和二进制格式解析没有什么不同,二进制格式微软会帮你转化的。至于你出现的问题可能还要看看代码~~你放到微软本身的x查看器里面看看是否正确。

2.看完你第二个问题,我觉得你是个初学者,.x文件里面的矩阵变换根本不用关心。

 楼主| 发表于 2009-6-5 15:07:32 | 显示全部楼层

谢谢。

     问题1得到解决,解析方法确实是一样的。

     但问题2依然存在,我在没有考虑.X文件中转换矩阵的情况下解析的熊猫显示的不正常(但我的程序可以正常显示微软的tiny.x)。

     可能是我的表达不清楚。  我的想法是这两个.X中使用的顶点坐标可能是不一样的。所以使用相同的世界、视图和投影变换,得到的结果就有差别。 (不会在帖子里面贴图,所以没办法给大家看图片)

 楼主| 发表于 2009-6-5 15:22:45 | 显示全部楼层

  我再解释一下好了。

  我解析出来的tiny是正面对着我,但是熊猫是脚朝向我. 而且tiny距离我比较近(直观表现就是图像比较大),但是熊猫的图像就比较小. 

发表于 2009-6-5 21:48:21 | 显示全部楼层
有什么方法能把二进制格式转化成文本格式吗.....
发表于 2009-6-6 10:21:26 | 显示全部楼层

dongch007:   没有办法将二进制转化成文本的,除非自己写

0o笨鸟o0:   熊猫的大小 或者朝向可能是在max里面的默认方向的问题,这个好解决啊,你在绘制前伸缩旋转一下就好了,三维模型大小自己调整就行,这个没难度的。一般建模的时候默认的模型都是在(0,0)点,面朝z轴负方向。

发表于 2009-6-6 16:47:33 | 显示全部楼层
汗~~~怎么会在这里???这里是设置矩阵变换,投影变换的地方!
 楼主| 发表于 2009-6-6 17:01:37 | 显示全部楼层
 我是使用world matrix来更新 根Frame  但是感觉子Frame更新的不完全 所以显示的结果就是有的部分在运动 有的部分不动
发表于 2009-6-7 03:10:56 | 显示全部楼层

你的骨骼动画解析代码也是自己写的?

 楼主| 发表于 2009-6-8 00:21:19 | 显示全部楼层
解析代码是我自己写的.  我找到不能正常显示的原因了。因为我开始使用的是混合矩阵索引(有点儿想顶点索引,我想是),好象我的显卡不支持,然后改成不带索引的矩阵混合就OK了~
发表于 2009-6-8 08:55:42 | 显示全部楼层

  顶点混合是渲染带有平滑关节的多边形片段,提高场景逼真性的技术,这种技术特别适合于渲染角色,多边形网格通常被称为蒙皮。渲染系统在顶点上使用额外的世界变换矩阵进行变换,得到多个结果,然后再进行线性混合。所谓的混合,就是根据多顶点,按照一定比例计算出一个中间值,这个比例称之为权重(weight),它代表了一个顶点对结果的影响程度,所有顶点的权重之和为1。用这种方法渲染的顶点能够在关节处模拟平滑的蒙皮。
D3D提供了图形混合技术,即蒙皮技术。这个技术的主要作用是实现具有平滑关节对象,特别是角色模型的渲染,从而提高动画的真实感。
 
当骨骼系统比较复杂时,例如,一个网格,同时受到超过4个骨骼影响,就必须反复切换矩阵,效率较低。DirectX提供一种索引的方法使用这些矩阵,这种方法叫做索引顶点混合(Indexed Vertex Blending)。
Direct3D通过索引顶点混合,扩展了使用多个混合矩阵对顶点进行混合的支持。在索引顶点混合中,混合矩阵被保存在矩阵调色板(可以看成一个矩阵数组)中,使用矩阵索引来引用特定的混合矩阵。矩阵索引使用8位无符号整数表示,由每个顶点提供,因为Direct3D中限定每个顶点最多受到4个混合矩阵的影响,所以每个顶点最多具有4个矩阵索引,每个顶点的矩阵索引被组合成一个DWORD类型的整数存储和表示。因为每个顶点最多受4个混合矩阵的影响,所以在渲染一个三角形时最多可能需要使用12个混合矩阵,在这种情况下,矩阵调色板中最少需要包含12个混合矩阵。

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|3D数字艺术论坛 ( 沪ICP备14023054号 )

GMT+8, 2025-2-6 09:54

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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