v3dModifier试验成功!

今天,新试验的Modifier思想测试终于基本过了,现在v3dModelObject已经类似Max
里面的INode,自身RefObject了一些数据,也就是Position,Normal,Binormal,UV,
SkinBlend等,每个v3dModelObject都有一个ModifierStack,可以容纳多个v3dModifier
来修改它的数据,这些Modifier处理数据后,能够产生一个引擎需要的v3dMesh数据,
最终,无论是渲染还是别的数据访问,都通过v3dMesh来完成。目前,我实现了几个
常用的Modifier,比如v3dSkinModifier,v3dDefaultModifier,v3dTex0SlerpModifier,
v3dMorpherModifier。这些modifier都可以根据需要,AddModifier到v3dModelObject
里面去,影响数据修改。在任何时候,用户都可以通过Modifier接口,暂停,启动特定
Modifier,甚至可以根据需要,将某个Modifier设置成为CPU或者GPU处理。
比如如下应用:
某个角色模型,他有表情动画,他同时是一个骨骼动画,而且他身上Diffuse纹理有
纹理插值动画,在v3dModelObject中,我们按顺序可以添加如下Modifier:
v3dMorpherModifier
v3dSkinModifier
v3dTex0SlerpModifier
系统就会先处理好表情动画,然后处理骨骼动画,最后把纹理做一个关键桢插值。用户
不用关心任何细节,当然,如果用户发现这个ModelObject距离摄像机很远,他不做
表情动画并不会影响最终质量,于是他可以QueryModifier( vIID_v3dMorpherModifier )
取得表情动画控制接口,然后SetUsed(false);这时候,系统自然就会停止表情动画
的处理了。在某些情况下,CPU处理能力剩余,或者需要骨骼动画接过了,我们可以
QueryModifier( vIID_v3dSkinModifier ),获得Skin控制,然后SetSoftMode( TRUE );
这时候,系统会把骨骼动画用CPU处理好,存放在v3dMesh中交给用户,然后继续后面的
Tex0Slerp的GPU处理。当然,由于目前GPU的VB回写还不行,要改变中间的Modifier为
Soft,恐怕还是不行,等d10硬件普及了这个也许就不是问题了,此外,因为constant buffer
这个激动人心的特性的引入,也不会因为Modifier占用太多const register而让shader
无法运行了。
在考虑添加别的Modifier,比如处理披风的布料Modifier一类的,有时间可以再好好
试验试验。
好了,就这么多了,毕竟公司的事情多,明天后两天估计要忙得晕头转向了。
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值