参照Win32下的DirectX 10代码,实现基于DirectX 11的Windows Store App,虽然是弯路,会遇到一些额外的问题,但是感觉在解决问题的过程中,能对DirectX理解的更深一些。而且这样做能够避免自己直接复制代码,不关注细节。这里对目前为止遇到过的问题进行总结,防止自己以后犯同样的错误。水模型之前的代码只是对VS2012模板代码进行简单改动,从没遇到问题,问题都出现在实现水波纹的过程中,都是运行时出现的错误。

一、内存访问冲突

错误提示:


出现这个错误的原因是在Renderer的Update方法中,没有用条件语句

if (m_loadingComplete)

{

}

包含更新水面顶点缓冲区的代码。

从调用堆栈可以看出问题由WaterModel的Update方法引发,而且弹出错误提示是在应用启动时,也就是第一次对Update方法的调用。Update方法中需要更改缓冲区,出现此问题应该是缓冲区未初始化。检查Renderer类的Update方法后发现问题。由于初始化资源为异步调用,第一次执行Update方法时不能保证缓冲初始化完成,这时尝试更新缓冲区就会出现问题。

教训:

1、使用资源前要保证初始化完成。

2、异步编程一定要注意任务次序控制。

二、输入验证失败

错误提示:


这个问题出现在Disturb方法的输入验证阶段,从输出提示可以看出是传入的参数越界。因此定位到Renderer的Update方法,找到生成随机值的代码。

int i = 5 + rand() % 128;

int j = 5 + rand() % 128;

i和j有可能超出128。在初始化时用的代码是

m_water.Initialize(m_d3dDevice.Get(), 128, 128, 1.0f,0.03f, 3.25f, 0.4f);

这样就会造成Disturb方法输入验证失败。

教训:

在编程中要避免奇异数出现,方便查找错误。

三、图像绘制异常

错误现象:


程序能正常运行,但是水面会从边界高度无限增加,最终消失。由于这次没有出现运行错误,所以只检查更新水面高度的代码,最终发现是循环的起止范围有误。使用这种算法更新水面高度时会用到当前顶点四个方向上的邻点,而边界顶点总会缺少一个方向的邻点,这样,在更新顶点高度时会引入一个无效值,得出无意义的结果,出现上面的现象。

教训:

实现算法时要注意边界条件。

Win8 DirectX 开发问题总结(一)相关推荐

  1. 空间素材代码_C++大神解读视频捕获程序,VC++基于Directx开发的源代码

    一款小巧的视频捕获程序,VC++6.0基于Directx开发的源代码,编译时需要Directx相关类库文件, 窗口表单编写的简单视频捕捉应用程序.这个工程既演示了窗口表单应用程序的创建,又演示了 Op ...

  2. DirectX 开发环境配置

    想使用DirectX开发游戏,前提是要搭建DirectX的开发环境啦. 下面我们就一起学习下DirectX开发环境搭建 1. 首先是DirectX SDK安装, 下载地址是: http://www.p ...

  3. 图解VC#版DirectX开发教程二 - 摄像机

    用VC#进行DirectX开发,程序结构大体都是一样的. 上一篇博文,VC#版DirectX开发入门详解 http://blog.csdn.net/bcbobo21cn/article/details ...

  4. Windows 8 Directx开发学习笔记(一)应用基本框架

    Windows 8系统10月25日就要正式发布,其应用可与Windows Phone 8应用兼容,所以打算转到Windows 8系列的开发.之前虽然开发过应用,但对游戏开发更感兴趣,随意开始学习Met ...

  5. 【Visual C++】游戏开发笔记二十五 最简化的DirectX开发环境的配置

    本系列文章由zhmxy555(毛星云)编写,转载请注明出处. http://blog.csdn.net/zhmxy555/article/details/7672101 作者:毛星云    邮箱: h ...

  6. 逐梦旅程学习笔记 DirectX开发入门02:旋转的彩色立方体

    本文是 系列笔记DirectX部分的第2篇,上一篇参见 逐梦旅程学习笔记 DirectX开发入门01:应用程序基本框架 这个示例增加了一些实际的内容,首先是绘制一个颜色随机变幻的彩色立方体,其二是显示 ...

  7. DirectX开发环境的快速配置

    一个DirectX程序要想正确的编译和链接,需要下面三个主要前提 一 安装DirectX SDK 二 正确配置.h文件路径和.lib文件路径 三 正确链接所需.lib文件 详细步骤如下: 一.安装Di ...

  8. 一般性 DirectX 开发事宜

    一般性 DirectX 开发事宜 我在试图编译示例时,为何得到那么多错误消息? 您可能没有将 include 路径设置正确.许多编译器(包括 Microsoft® Visual C++®)包含 SDK ...

  9. win8/Metro开发系列二 Xaml数据绑定

    首先还是那句话,我不是大牛,这些只是简单的记录一下学习的过程,没有太多面向对象和设计模式的思维,只偏基础,不喜莫笑:个人观点如果有不足之处,还望多多指教!由于学的不是太深入这里大多数是面向控件和开发介 ...

最新文章

  1. Tensorflow源码解析5 -- 图的边 - Tensor
  2. 在python中等号前面与后面分别是什么意思-Python中冒号等于(:=)是什么意思?...
  3. 通过js引用外部脚本(方便直接在浏览器上调试抓取代码)
  4. 电脑键盘中英文按键有哪些?有什么作用?
  5. mysql常用操作记录
  6. 微型计算机接口期末,微机接口技术期末复习题及其答案 (2)
  7. flask-前端-requests之response对应关系 text
  8. 关于练习美剧听写中碰到的问题
  9. HTML,CSS,font-family: 中文字体的英文名称 (宋体 微软雅黑 的英文写法)
  10. 超多淘宝京东抢购秒杀软,脚本,易语言软,有作者
  11. 怎样做风险评估?风险评估有哪些具体实施流程?
  12. JQuery 如何使用插件如何安装插件(详细讲解)
  13. Mstar平台_遥控器驱动
  14. 客户至上 | 国产BI领跑者,思迈特软件完成C轮融资
  15. 收到了两家公司的offer怎么选择?
  16. 简要分析“荒野乱斗”基本元素
  17. 基于SSM的美容院管理系统
  18. django 重置密码
  19. 苹果cms如何在虚拟主机上设置伪静态
  20. 【信息系统项目管理师】第七章 项目成本管理(考点汇总篇)

热门文章

  1. antd upload手动上传_SpringBoot 如何上传大文件?
  2. 线程打印_Java编程核心技术之——线程操作
  3. 测试工程师,应当知晓的12项基本原则
  4. dbvisualizer报错No JVM
  5. 前端学习与“IT界大佬告诉你,程序员接私活的7大平台利器”
  6. windows oracle增量备份脚本,oracle 增量备份脚本
  7. java nio 关闭channel_JAVA NIO(二)Channel通道
  8. 工作7年开发小哥转行测试:只有努力向前奔跑,才能得到你要的~
  9. centos 6.2安装mysql_centos6.2安装mysql
  10. html dom怎么写,HTML DOM 属性