`
yangshen998
  • 浏览: 1246734 次
文章分类
社区版块
存档分类
最新评论

Windows Phone 7 3D开发中使用纹理贴图

 
阅读更多

Windows Phone 73D的支持还是不错的,据说是用OpenGL/ES做的,使用起来倒是也有点那种感觉。另外,写本文的另一个原因是我的第一个3D试验竟然遇到了问题,花了1个小时才搞定,所以也一并记录下来,供遇到和我同样的问题的朋友参考。

本文就不讲XNA 4.0的游戏框架了,直接上一段代码,该代码使用VertexPositionColor渲染了一个三角形,程序运行一切正常。

运行结果如下:

在确认了3D开发的这种代码结构以后,用VertexPositionTexture渲染同样的三角形,只是这次采用纹理贴图,代码如下:

啰嗦一句,在此代码中VertexPositionTexture的第二个Vetex2代表的是UV坐标,对应的含义是(00)点对应了纹理图片的左上角,(11)点对应了纹理图片的右下角。

上述代码在运行的时候会在VS2010的输出窗口中显示:

A first chance exception of type 'System.NotSupportedException' occurred in Microsoft.Xna.Framework.Graphics.dll

A first chance exception of type 'System.Threading.ThreadAbortException' occurred in Microsoft.Xna.Framework.dll

同时模拟器里的程序直接退出,看不到结果。原因是什么呢?疑惑并仔细检视代码中……

与前一个彩色三角形对比,顶点顺序没变,摄像机位置没变,投影矩阵没变,按说是不可能出现这种问题的,而且程序直接崩了,没有信息抛出,真是很郁闷。

经过不断的试错,在宣布放弃之前,忽然想起来关于纹理方面的一个注意事项。有过3D开发经验的朋友都知道,纹理是要求符合2的整数次方对齐的,而我所加载的来自于外部任意图片的纹理不符合这一要求,所以程序挂了。

又查了一些资料,找到了准确的原因。原来是Windows Phone 7 XNA中默认的纹理寻址模式使用了Wrap,造成了与GPU的不兼容,如果改成Clamp就好了。

看来在这个地方微软得要有文档说明才好,否则还真是难找问题所在。修改后的代码如下:

最终的模拟器结果是:

不管怎么说,Windows Phone 7XNA游戏开发框架以及3D方面的开发接口还是很出色的,顶一下微软,并希望这个平台能尽快发展起来。

附Camera的代码:

——欢迎转载,请注明出处 http://blog.csdn.net/caowenbin ——

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics