当前位置: 首页 > news >正文

一个困扰我一个多星期的Nebula3的BUG

最近看了一些PhysX的东西, 本想写个demo练练手, 结果遇到一个非常诡异的问题

当我兴冲冲的用Wizard建了一个工程, 编译, 运行, 竟然一片黑?

奇怪啊, 这个Wizard程序应该没问题才对, 要不然我怎么敢发布出来?

换成Release, 编译...结果正常!

用PIX跟踪了一下发现, 两个版本的变换矩阵不一样!

当时就茫然了...拿SDK自带的testviewer编译运行了一下, debug版竟然是这样的:

只能看到两只脚, 鼠标操作没有反应!

太崩溃了~

代码肯定没修改, 因为我本机是架设了SVN的, 一切修改都有记录

重新安装一个Arip2009, 结果仍然一样!

然后QQ询问同样研究Nebula的朋友, 他们的结果是对的!

我就把我编译的testviewer.debug.exe发过去, 结果在他们那边也是正常的...

然后我就理所当然的排除了代码错误的可能性

首先怀疑自己的软件环境是不是有冲突, 因为我习惯装一大堆软件.....

正好赶上Win7出RTM, 还正好在超频论坛发现了我主板的激活BIOS(当初花钱弄了个超频专用的, 结果买回来也没超-_-), 于是就升级了...

虽说身为一个软件开发人员, 用盗版是可耻的, 但为了解决眼下的问题, 我等不到Win7开始卖了

Xp->Win7, DX SDK March 2008->March 2009, VS2005->VS2008, 9800GT driver, SVN,etc, updated, too......

然后我就满怀希望地在全新的环境下又编译了一遍......结果仍然不对

我当时就郁闷了, 难道是硬件出了问题? 不对啊, release是正常的-_-

翻出N3 SDK的上个版本, 编译之, 正常...

难道是编译选项的问题? 全部改回去, 编译, 仍然不行

又找了个跟我软件硬件环境都几乎一样的哥们测试了一下, 他那儿也正常!

又找了个哥们, 终于他那里出现一样的症状了, 不过他不搞3D, 没法一起查了-_-

跟倒数第二个哥们辩论了一番, 他说了句: 为什么不能操作呢?

一句话惊醒梦中人:一直以来我都是把注意力放到变换矩阵为什么不正确了, 以为矩阵不正确所以才没法操作

于找到操作的处理代码, 看到了这样一段:

// process gamepad input float zoomIn = 0.0f; float zoomOut = 0.0f; float2 panning(0.0f, 0.0f); float2 orbiting(0.0f, 0.0f); if (gamePad->IsConnected()) { const float gamePadZoomSpeed = 50.0f; const float gamePadOrbitSpeed = 10.0f; const float gamePadPanSpeed = 10.0f; if (gamePad->ButtonDown(GamePad::AButton)) { this->mayaCameraUtil.Reset(); } if (gamePad->ButtonDown(GamePad::StartButton) || gamePad->ButtonDown(GamePad::BackButton)) { this->SetQuitRequested(true); } float frameTime = (float) this->GetFrameTime(); zoomIn += gamePad->GetAxisValue(GamePad::RightTriggerAxis) * frameTime * gamePadZoomSpeed; zoomOut += gamePad->GetAxisValue(GamePad::LeftTriggerAxis) * frameTime * gamePadZoomSpeed; panning.x() += gamePad->GetAxisValue(GamePad::RightThumbXAxis) * frameTime * gamePadPanSpeed; panning.y() += gamePad->GetAxisValue(GamePad::RightThumbYAxis) * frameTime * gamePadPanSpeed; orbiting.x() += gamePad->GetAxisValue(GamePad::LeftThumbXAxis) * frameTime * gamePadOrbitSpeed; orbiting.y() += gamePad->GetAxisValue(GamePad::LeftThumbYAxis) * frameTime * gamePadOrbitSpeed; }

嗯,我是烧的插了个360的手柄, 不会放那儿不动也会影响操作吧? 注释掉, 编译, debug结果终于正常了!

下断点观察, 发现 float frameTime = (float) this->GetFrameTime();返回的是一个无效值.....汗

转到frameTime的老窝, 发现了这样一件事:

//------------------------------------------------------------------------------ /** */ RenderApplication::RenderApplication() : //time(0.0), //frameTime(0.0), quitRequested(false) { // empty }

这俩变量竟然没初始化? 疯掉了...当初也想过变量未初始化的原因, 因为这是导致debug/release不一样结果最常见的原因.

但是在别人机器上运行正常让我排除了代码错误的可能性, 一直在找运行环境的问题

问了下那个同命相连的哥们, 他也插了个360的手柄玩MGS来着, 崩溃

最后解决办法, 把上面那两个变量的注释符去掉, 编译, OK.........

相关文章:

  • [Python]—Linux Server 系统监控程序
  • .NET 4.0中使用内存映射文件实现进程通讯
  • 中国移动短信指令大全
  • SQLServer中的循环批处理
  • IT市场10大趋势!
  • 关于Oracel 10g http://ip:1158/em 的问题
  • 18句话入门SQLServer XML
  • 移动商务潜力无穷
  • 一道可以成为.NET面试“必杀题”的“简单问题”
  • Linux 简单的网络配置练习一
  • 解决Ubuntu 9.04 耳机有声音但外放无声问题
  • IPv4和IPv6比特转发率和包转发率的关系
  • [LeetCode]-Pascal's Triangle III 杨辉三角问题
  • 令狐冲和TCP/IP协议的第三层协议的关系
  • [LeetCode]-Spiral Matrix III 螺旋矩阵
  • [译]前端离线指南(上)
  • 《Java编程思想》读书笔记-对象导论
  • 【跃迁之路】【463天】刻意练习系列222(2018.05.14)
  • 2018一半小结一波
  • C++入门教程(10):for 语句
  • cookie和session
  • CoolViewPager:即刻刷新,自定义边缘效果颜色,双向自动循环,内置垂直切换效果,想要的都在这里...
  • css布局,左右固定中间自适应实现
  • Java 网络编程(2):UDP 的使用
  • LeetCode18.四数之和 JavaScript
  • Node 版本管理
  • Promise面试题,控制异步流程
  • Vue--数据传输
  • XML已死 ?
  • 基于axios的vue插件,让http请求更简单
  • 使用common-codec进行md5加密
  • 温故知新之javascript面向对象
  • - 转 Ext2.0 form使用实例
  • Android开发者必备:推荐一款助力开发的开源APP
  • gunicorn工作原理
  • shell使用lftp连接ftp和sftp,并可以指定私钥
  • ​MPV,汽车产品里一个特殊品类的进化过程
  • ​第20课 在Android Native开发中加入新的C++类
  • #我与Java虚拟机的故事#连载04:一本让自己没面子的书
  • $emit传递多个参数_PPC和MIPS指令集下二进制代码中函数参数个数的识别方法
  • %check_box% in rails :coditions={:has_many , :through}
  • ( )的作用是将计算机中的信息传送给用户,计算机应用基础 吉大15春学期《计算机应用基础》在线作业二及答案...
  • ( 10 )MySQL中的外键
  • ()、[]、{}、(())、[[]]命令替换
  • (1)STL算法之遍历容器
  • (11)MSP430F5529 定时器B
  • (亲测成功)在centos7.5上安装kvm,通过VNC远程连接并创建多台ubuntu虚拟机(ubuntu server版本)...
  • (转)fock函数详解
  • (转)四层和七层负载均衡的区别
  • ..回顾17,展望18
  • ./configure,make,make install的作用(转)
  • .desktop 桌面快捷_Linux桌面环境那么多,这几款优秀的任你选
  • .NET 实现 NTFS 文件系统的硬链接 mklink /J(Junction)
  • .NET上SQLite的连接
  • .net实现头像缩放截取功能 -----转载自accp教程网