一个困扰我一个多星期的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.........

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏美团技术团队

顶会论文:纠删码存储系统中的投机性部分写技术

本文已被USENIX'17年度技术大会录用,此处为中文简译版。 阅读英文论文完整版请点击:Speculative Partial Writes in Erasu...

61710
来自专栏ThoughtWorks

Kubernetes救援 - 教你如何从新技术的坑里爬出来(上) | TW洞见

今日洞见 文章作者/配图来自ThoughtWorks:佟达。 本文所有内容,包括文字、图片和音视频资料,版权均属ThoughtWorks公司所有,任何媒体、网站...

3979
来自专栏Jerry的SAP技术分享

SAP S4CRM 1811 服务订单API介绍

Jerry在今年2月28日,SAP Customer Management for S/4HANA 1.0正式问世这个具有纪念意义的日子,同时发布了中英文版的博...

1593
来自专栏张戈的专栏

博客集成Hitokoto·一言经典语句功能

Hitokoto·一言是一个挺有意思的项目,官方的自我介绍如下: 一言网(Hitokoto.cn)创立于 2016 年,隶属于萌创 Team,目前网站主要提供一...

34112
来自专栏平凡文摘

你真的很熟分布式和事务吗?

1243
来自专栏aCloudDeveloper

初识The ONE

Author:bakari  Date:2014.1.14       本学期开始做真正意义上的研究,主要方向为wireless and mobile netw...

2446
来自专栏CSDN技术头条

轻博客始祖Tumblr:哈希以支撑2.3万Blog请求/秒

【编者按】Tumblr是目前全球最大的轻博客网站,也是轻博客网站的始祖。当下已有超过1.96亿博客,930亿帖子,每秒2万3千请求。近日,该公司网站可靠性工程师...

2145
来自专栏Zchannel

核武按钮终被劫持?Meltdown与Spectre攻击深入解析

1242
来自专栏精讲JAVA

你真的很熟分布式和事务吗?

微吐槽 hello,world. 不想了,我等码农,还是看看怎么来处理分布式系统中的事务这个老大难吧! 本文略长,读者需要有一定耐心,如果你是高级码农或者架构师...

2069
来自专栏安富莱嵌入式技术分享

【安富莱二代示波器教程】第3章 示波器设计—功能划分和准备工作

完整教程下载地址:http://forum.armfly.com/forum.php?mod=viewthread&tid=45785

992

扫码关注云+社区