游戏开发论坛

 找回密码
 立即注册
搜索
查看: 4583|回复: 11

物体的世界坐标如何变换到屏幕坐标?

[复制链接]

16

主题

114

帖子

114

积分

注册会员

Rank: 2

积分
114
发表于 2007-3-7 10:17:00 | 显示全部楼层 |阅读模式
如果已知物体的世界坐标p(x,y,z,w) 相机矩阵Mc,投影矩阵Mp

那屏幕坐标如何如何表示呢?(假设窗口大小width,height已知);

是 p*Mc*Mp?

36

主题

1047

帖子

1147

积分

金牌会员

Rank: 6Rank: 6

积分
1147
发表于 2007-3-7 10:32:00 | 显示全部楼层

Re:物体的世界坐标如何变换到屏幕坐标?

还要加上屏幕变换矩阵 Ms, Pm = p*Mc*Mp*Ms.

16

主题

114

帖子

114

积分

注册会员

Rank: 2

积分
114
 楼主| 发表于 2007-3-7 14:50:00 | 显示全部楼层

Re:物体的世界坐标如何变换到屏幕坐标?

什么叫屏幕变换矩阵?  在dx sdk的sample里,没有看到什么屏幕变换矩阵啊?(它一般只有world matrix,view matrix 和project matrix)

362

主题

3023

帖子

3553

积分

论坛元老

Rank: 8Rank: 8

积分
3553
发表于 2007-3-7 16:58:00 | 显示全部楼层

Re:物体的世界坐标如何变换到屏幕坐标?

这个很复杂,你先学数学

0

主题

1

帖子

7

积分

新手上路

Rank: 1

积分
7
发表于 2007-3-7 17:48:00 | 显示全部楼层

Re: 物体的世界坐标如何变换到屏幕坐标?

好像还有个 setviewport ,里面可以设定视口的位置

9

主题

688

帖子

688

积分

高级会员

Rank: 4

积分
688
发表于 2007-3-8 00:29:00 | 显示全部楼层

Re:物体的世界坐标如何变换到屏幕坐标?

好像有专门的函数

8

主题

284

帖子

296

积分

中级会员

Rank: 3Rank: 3

积分
296
QQ
发表于 2007-3-8 06:20:00 | 显示全部楼层

Re:物体的世界坐标如何变换到屏幕坐标?

Projects a 3-D vector from object space into screen space.

D3DXVECTOR3 *WINAPI D3DXVec3Project(          D3DXVECTOR3 *pOut,
    CONST D3DXVECTOR3 *pV,
    CONST D3DVIEWPORT9 *pViewport,
    CONST D3DXMATRIX *pProjection,
    CONST D3DXMATRIX *pView,
    CONST D3DXMATRIX *pWorld
);

19

主题

73

帖子

73

积分

注册会员

Rank: 2

积分
73
发表于 2007-3-8 09:18:00 | 显示全部楼层

Re: Re:物体的世界坐标如何变换到屏幕坐标?

King_jinjing: Re:物体的世界坐标如何变换到屏幕坐标?

Projects a 3-D vector from object space into screen space.

D3DXVECTOR3 *WINAPI D3DXVec3Project(  ...



这个应该是 视口 坐标, 应该还需要根据 back buffer 和 窗口 大小

才能得到 窗口坐标

个人认为

35

主题

161

帖子

161

积分

注册会员

Rank: 2

积分
161
发表于 2007-3-11 13:57:00 | 显示全部楼层

Re: Re:物体的世界坐标如何变换到屏幕坐标?

iverson: Re:物体的世界坐标如何变换到屏幕坐标?

什么叫屏幕变换矩阵?  在dx sdk的sample里,没有看到什么屏幕变换矩阵啊?(它一般只有world matrix,view matrix 和project matrix)


从局部坐标到世界坐标到相机坐标应该都没什么问题。

理论上,project 是指将相机坐标空间的点投影到视平面上。
屏幕变换是指将视平面上的坐标变换到屏幕坐标。

视平面一般是采用归一化的坐标,即范围是2X2。x,y坐标的范围都是[-1,1]。从视平面到屏幕坐标(范围是:x [0,screenWidth-1] y[0, screenHeight-1])的变换是2d变换(包括平移和缩放)。
视平面的宽高比要等于屏幕宽高比,所以如果屏幕不是方的,归一化视屏面的范围就不是2X2了。(固定x [-1,1] , y就是[-1/宽高比,1/宽高比])
这就要在投影时将视平面的投影坐标进行缩放。(比如x不变,y乘以宽高比)将视平面坐标缩放到2X2。此时的视平面是变形的。然后在屏幕变换中。视平面x坐标缩放screenWidth倍,y坐标缩放screenHeight倍。(注意这个缩放也是不成比例的)由于之前y坐标乘了宽高比(即screenWidth/screenHeight)。所以等于都缩放了screenWidth倍。抵消了之前的变形,所以就得到了正确的屏幕坐标。

我想之所以搞这么麻烦(两次变形,以毒攻毒,负负得正),只是为了将视平面归一化。这样比较容易进行齐次坐标空间裁剪吧。


有时候,会直接将相机空间坐标变换到屏幕坐标,也就是这两步合并了。但也叫投影,尽管已不是纯粹的投影。

说得不对的地方,敬请指正。

4

主题

41

帖子

41

积分

注册会员

Rank: 2

积分
41
发表于 2008-1-16 16:46:00 | 显示全部楼层

Re:物体的世界坐标如何变换到屏幕坐标?

是这样吗
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-12-19 21:47

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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