其实山寨也不容易

 

 

  看到CSDN首页有个文章标题:中国缺乏创新,大多是“山寨”,我想说其实“山寨”也不容易。一直想“山寨”一个google earth,这

 

一路做来,几乎块两年了。

 

 

  又是一个莫名的问题,导致一个晚上的时间来调试。

 

  还是那句老话,写代码容易,调代码难。

 

 

  问题描述如下:

 

       发现当加载了模型之后,有一定概率退出会出现D3D资源没有释放完的错误。

 

   一步步排除:

 

      1,调试代码,确定新写的模型管理器没有问题,因为这里是新代码,出错的概率是最大的。

 

           反复很多次后,没有发现问题。

 

      2,尝试让bug复现

 

           操作                                            结果                           结论

           分别加多个模型和1个模型          bug偶尔会出现                   和模型,纹理数据量无关

           不显示模型                              bug偶尔会出现                 完全排除和新写的纹理管理器有关系

 

       这里经过多次操作,终于可以百分百复现问题

          

            当双击模型飞行后 不出现问题

            但是双击那个包含lookat的空的placemark   出现问题

 

        那说明问题出在应用层代码的flytofeature

 

        这回简单了,证明问题彻底跟最近新写的代码无关

 

        flytofeature 内实际调用两个com组件,一个是相机,一个是地形

 

       经过排除,证明问题出在地形节点

 

 

      实际上这里只调用了地形了的GetHeight接口,调试发现和GetHeight函数没有关系。

 

  如果在以前,那么无论如何也解决不了这个问题的。

 

   幸好最近此类问题碰到的太多了,手到擒来。

 

    退出的时候有d3d资源没有释放,那么证明地形节点的释放有问题

 

    这里要说明一个问题,com组件内一般有finalrelease函数,当com组件最后一次释放时,会调用,所以大部分的释放函数都写在这里

 

   但是通过c# 调用com后,com对象的析构无法控制,导致不一定能调用finalrelease

 

    所以像D3D资源的释放最好不要放这里

 

    调整内部一些资源的释放位置,问题解决。。。

 

   

  今天顺道解决另一个光照问题:

 

   描述:

       当近距离观察模型时,模型变黑

 

      这个明显是光照导致的,至于为什么也一直没想明白

 

      今天调上面的问题时候,突然灵光一闪,我使用的光照方向都是通过视点-模型中心点获得,近距离观察模型边缘的时候,光照和法向量都垂直了,当然黑了

 

     修改为视点方向,一切OK了

         

 

     支持kmz/dae模型的好处是google 模型库有取之不尽,用之不尽的免费模型,很给力的

 

    每天都在进步,哪怕速度像蜗牛,你也是充实的。。。希望一切的努力不要白费。

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值