日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

XNA2.0 API --- ViewPort.Unproject出错啦

發布時間:2025/3/16 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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的毒害…

?

Code
?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出错啦的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。