XNA2.0 API --- ViewPort.Unproject出错啦
XNA2.0系统API居然出错!折腾了我N久。现象是鼠标射线不准,莫名其妙的不准,有时旋转一下相机就乱了,在官网论坛上找了一个替代版本,问题解决。这个问题XNA1.0并不存在,到2.0就有了,用反编译查看,果然是XNA1.0使用DX实现,XNA2.0是重写的方法。这个问题XNA论坛都提出来了,ViewPort.Unproject也算是一个比较重要的方法,居然到XNA3.0还存在,真不知道开发人员是怎么想的,为这个破问题折腾来折腾去,先前以为是相机问题,重写了好多遍,看来即使是官方API也不要过于迷信,这回主要就栽在这点。
经验总结:代码使人写的,不是神写的,人写的就会出错,就这么简单。最后附上可用的代替版本,看有多少可怜的孩子还在受到原API的毒害…
1 public static Vector3 UnprojectEx(Viewport viewport, Vector3 screenSpace,Matrix projection, Matrix view, Matrix world)
2 {
3 //First, convert raw screen coords to unprojectable ones
4 Vector3 position = new Vector3();
5 position.X = (((screenSpace.X - (float)viewport.X) / ((float)viewport.Width)) * 2f) - 1f;
6 position.Y = -((((screenSpace.Y - (float)viewport.Y) / ((float)viewport.Height)) * 2f) - 1f);
7 position.Z = (screenSpace.Z - viewport.MinDepth) / (viewport.MaxDepth - viewport.MinDepth);
8
9 //Unproject by transforming the 4d vector by the inverse of the projecttion matrix,
10 //followed by the inverse of the view matrix.
11 Vector4 us4 = new Vector4(position, 1f);
12 Vector4 up4 = Vector4.Transform(us4,
13 Matrix.Invert(Matrix.Multiply(Matrix.Multiply(world, view), projection)));
14 Vector3 up3 = new Vector3(up4.X, up4.Y, up4.Z);
15 return up3 / up4.W; //better to do this here to reduce precision loss..
16 }
转载请注明出处:
作者:gogoplayer
E-mail : gogoplayer@163.com
QQ : 78939328
http://www.gogoplayer.com.cn
转载于:https://www.cnblogs.com/gogoplayer/archive/2008/10/30/1322800.html
XNA2.0 API --- ViewPort.Unproject出错啦相关推荐
- 天地图,js 4.0 api,简单调用,高手请绕行
本文介绍使用天地图 js4.0 api,实现地图显示后台gps分布情况: 主要借用H5 GPS获取,利用天地图的背景展示: 效果图如下: 第一步,通过采集网页,手机gps数据,录入后台数据库:界面如下 ...
- php 接口 2.0,YII 2.0 API接口开发
YII2.0 API接口开发 首先先安装 YII2.0 高级模板(安装请参考其他教程) 准备 添加数据库配置 common/config/main-local.php image 把backend目录 ...
- java.lang.LinkageError: JAXB 2.0 API is being loaded from the bootstrap classloader, but this RI(xxx
在使用webservice,mule esb等需要jaxb的项目里经常会出现 JAXB 2.0 API is being loaded from the bootstrap classloader这个 ...
- android preferenceactivity 源码,PreferenceActivity PreferenceScreen (3.0/API 11 以前)
Android提供了一个XML驱动的框架,用于为应用程序创建系统样式的PreferenceScreen. (3.0/API 11 以前)是这样使用的 看代码: mypreference.xml and ...
- Android 5.0 API 的变化——开发人员注意
Android 5.0 API变化 译自 http://developer.android.com/intl/zh-cn/about/versions/android-5.0.html -- By N ...
- 本周ASP.NET英文技术文章推荐[03/23 - 04/05]:C#、Visual Studio、MVC、死锁、Web 2.0 API、jQuery、IIS7、FileUpload...
摘要 本期共有9篇文章: 提高C#和Visual Studio 2008生产力的10个技巧 ASP.NET MVC Action过滤器:缓存和压缩 程序停止工作及其解决方法:第一部分:死锁 调用Dig ...
- android版本兼容API24,Android 7.0 (API 24) 适配
Android 7.0 (API 24) 适配 电池和内存 低电耗模式 此项新增的行为不会影响有关使您的应用适应Android 6.0(API级别23)中所推出的旧版本低电耗模式的建议和最佳做法,如对 ...
- Android开发者福利之--------Android 6.0 API
Android 6.0 API 着手开发 要着手开发 Android 6.0 应用,您必须先获得 Android SDK,然后使用 SDK 管理器下载 Android 6.0 SDK Platform ...
- 西门子博途安装服务器未响应,博途V13.0安装过程中出错
悬赏: 1西币 | 解决时间:2016-05-21 19:31 博途V13.0安装过程中出错 BUNDLE: SIMATIC STEP 7 Professional V13.0 SEBU Versio ...
最新文章
- 你最喜欢的一张美女图片?
- canvas用2d渲染出3d的感觉
- CGAL window 10安装、Demo使用步骤以及问题解决记录
- java 类型推理_java 11 局部变量类型推断
- 女博士7年不毕业,她破解了“量子计算最基础问题”
- JavaEE基础(02):Servlet核心API用法详解
- 响应式网页设计应该注意的9个原则
- bundle文件解压_通过sourcemap解压缩webpack 实战
- 【原理篇】推荐系统之矩阵分解模型
- 央视频卫视app直播收看教程(2021)
- 【USACO题库】3.4.4 Raucous Rockers“破锣摇滚”乐队
- 盘点IT职场“最差”程序员,这7个特征尤为典型!
- canvas教程12-阴影
- Sonic常见问题解决方法之——设备中心出现多个iOS设备接入异常
- 学习UI设计需要学习哪些软件?
- 【教程】【技术向】将博客批量导出为markdown或html格式
- Android 动态加载多版本SDK之DexClassLoader实践
- uni-app 动态添加class
- Mac 为 Homebrew 设置代理
- 大数据之路 阿里巴巴大数据实践 读书笔记