Away3D中DAE模型无法双面渲染的解决方案

今天又发现Away3D存在的一个问题,加载的dae模型无法进行双面渲染。整整一天都被这个问题所困扰,耐着性子对它的Loader3D类和Collada类来来回回仔细的看了一番,对着Dae格式文件逐段分析,最后终于找到了问题所在。 要对DAE文件进行双面渲染,DAE文件中有一个节点 需要设置为1。但是为什么有的文件明明是 1 了,但是还是会被渲染为单面呢。 通过把away3D的例子中的mario_testrun.dae和我自己的DAE文件以及网上找来了其他DAE文件的比较,发现:有的DAE文件的双面渲染参数放置在 节点中(away3D例子中的mario_testrun.dae),3DSMAX输出的DAE文件的双面渲染参数却在 的 中(我用max输出的所有文件都是这样。 mario_testrun.dae的渲染参数位置 …… 0 我的模型中渲染参数的位置 …… 0 1 0 0 目前我所用的away3D 版本3.4.0似乎只对 节点中的渲染参数做了判断,不支持后一种。 打开你的Collada类将其中私有方法parseGeometry(geometryData:GeometryData)做以下修改可以解决上述问题: 修改前Collada类的parseGeometry方法: --------------------------------------------------------------------------------------------------------------------------------- …… private function parseGeometry(geometryData:GeometryData):void { …… // Double Side if (String(geometryData.geoXML["extra"].technique.double_sided) != "") geometryData.bothsides = (geometryData.geoXML["extra"].technique.double_sided[0].toString() == "1"); else geometryData.bothsides = false; …… } 修改后Collada类的parseGeometry方法: --------------------------------------------------------------------------------------------------------------------------------- private function parseGeometry(geometryData:GeometryData):void { …… // Double Side if (String(geometryData.geoXML["extra"].technique.double_sided) != "") geometryData.bothsides = (geometryData.geoXML["extra"].technique.double_sided[0].toString() == "1"); //修复双面渲染的Bug else { var materialName:String = geometryData.materials[geometryData.materials.length - 1].symbol; var geoMaterial:XML=collada["library_materials"].material.(@id == materialName)[0]; if( geoMaterial ) { var effectId:String = getId( geoMaterial["instance_effect"].@url ); var effect:XML = collada["library_effects"].effect.(@id == effectId)[0]; var doubleSides:String; if (effect&&effect.profile_COMMON.extra.technique.double_sided[0]) { doubleSides = effect.profile_COMMON.extra.technique.double_sided[0].toString(); geometryData.bothsides = (doubleSides == "1"); } else if (effect&&effect.extra.technique.double_sided[0]) { doubleSides = effect.extra.technique.double_sided[0].toString(); geometryData.bothsides = (doubleSides == "1"); } else geometryData.bothsides = false; } else geometryData.bothsides = false; } …… } 大功告成 ==!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值