游戏开发论坛

 找回密码
 立即注册
搜索
查看: 3820|回复: 8

请问D3DXVec3Unproject是如何计算的?

[复制链接]

17

主题

42

帖子

48

积分

注册会员

Rank: 2

积分
48
QQ
发表于 2007-8-24 15:28:00 | 显示全部楼层 |阅读模式
我把投影矩阵、视矩阵和世界矩阵的逆矩阵乘回去,却得不到正确的结果。请问我应该如何做?

2

主题

429

帖子

435

积分

中级会员

Rank: 3Rank: 3

积分
435
发表于 2007-8-26 18:31:00 | 显示全部楼层

Re:请问D3DXVec3Unproject是如何计算的?

请说具体点,你怎么做的?我们才知道你哪里有问题。

8

主题

284

帖子

296

积分

中级会员

Rank: 3Rank: 3

积分
296
QQ
发表于 2007-8-26 22:23:00 | 显示全部楼层

Re:请问D3DXVec3Unproject是如何计算的?

世界矩阵——观察矩阵——投影矩阵——视口裁剪

17

主题

42

帖子

48

积分

注册会员

Rank: 2

积分
48
QQ
 楼主| 发表于 2007-8-27 09:15:00 | 显示全部楼层

Re:请问D3DXVec3Unproject是如何计算的?

屏幕坐标->XY轴通过视口转换到[-1,1]区间并带上Z轴×投影矩阵的逆矩阵×视矩阵(观察矩阵)的逆矩阵×世界矩阵的逆矩阵->除以W转换到齐次坐标

0

主题

228

帖子

285

积分

中级会员

Rank: 3Rank: 3

积分
285
发表于 2007-8-27 10:03:00 | 显示全部楼层

Re:请问D3DXVec3Unproject是如何计算的?

少了视口映射这一步

17

主题

42

帖子

48

积分

注册会员

Rank: 2

积分
48
QQ
 楼主| 发表于 2007-8-27 11:49:00 | 显示全部楼层

Re:请问D3DXVec3Unproject是如何计算的?

“XY轴通过视口转换到[-1,1]区间”不是视口映射吗?

0

主题

228

帖子

285

积分

中级会员

Rank: 3Rank: 3

积分
285
发表于 2007-8-27 16:14:00 | 显示全部楼层

Re:请问D3DXVec3Unproject是如何计算的?

除以W转换到齐次坐标?
这步放在最后有什么意义?

17

主题

42

帖子

48

积分

注册会员

Rank: 2

积分
48
QQ
 楼主| 发表于 2007-8-27 17:02:00 | 显示全部楼层

Re:请问D3DXVec3Unproject是如何计算的?

乘上投影矩阵的逆矩阵后W不就不再是1了么?难道是我弄错了?

0

主题

228

帖子

285

积分

中级会员

Rank: 3Rank: 3

积分
285
发表于 2007-8-28 10:57:00 | 显示全部楼层

Re:请问D3DXVec3Unproject是如何计算的?

图形学(DX版)大概的转换顺序是这样的:
模型空间的顶点 -> 世界矩阵 -> 观察矩阵 -> 投影矩阵 (这时候设置了正确的W值,为投影到 z =1平面做好了准备) -> 齐次除法 (这时候在视头体内的顶点都被变换到 x 在[-1,1]之间 , y在[-1,1]之间, z在[0,1]之间的立方体内) -> 最后再视口映射把x,y 值转换成屏幕坐标, z存入Z缓存

据DXSDK的DOC描述的,好像DX是先视口映射最后再执行齐次除法.不过这个顺序不重要
所以要计算UnProject的话就按照上面这个逆序就可以了
先视口映射 XY轴通过视口转换到[-1,1]区间,然后根据z值和znear和zfar计算出齐次除法前的z值,根据这个z值可计算出w, 根据w计算出齐次除法前的x,y 值,然后按顺序乘以 投影矩阵的逆矩阵×视矩阵(观察矩阵)的逆矩阵×世界矩阵的逆矩阵 应该就可以计算出3D坐标了

这是我的想法,不对还请大家指正
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-25 03:57

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表