Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1726419
  • 博文数量: 347
  • 博客积分: 9328
  • 博客等级: 中将
  • 技术积分: 2680
  • 用 户 组: 普通用户
  • 注册时间: 2010-07-29 23:45
文章分类

全部博文(347)

文章存档

2016年(1)

2013年(4)

2012年(207)

2011年(85)

2010年(50)

分类: C/C++

2010-11-23 21:30:02

1:透视投影矩阵的说明
D3DXMATRIX * D3DXMatrixPerspectiveFovLH(  D3DXMATRIX * pOut,  FLOAT fovy,  FLOAT Aspect,  FLOAT zn,  FLOAT zf);最难理解的参数:fovy
通过调用D3DXMatrixPerspectiveFovLH得到的矩阵为
xScale     0          0               0
0        yScale       0               0
0          0       zf/(zf-zn)         1
0          0       -zn*zf/(zf-zn)     0
where:
yScale = cot(fovY/2)

xScale = yScale / aspect ratio
该矩阵的推导过程我们不必关心,否则要d3dx干嘛?
经过推导,假设空间中一点P( x, y,z,1).那么经过投影变换后新的坐标为
P`(  x*xScale,  y*yScale,  z*zf/(zf-zn) – zn*zf(zf-zn), z ), 这时得到的坐标是齐次空间坐标,应映射到三维空间坐标。 同时除以z
我们还要找到角度和点位置某种形象的关系,现在看来z和角度fovy无关
一般我们会把fov设定在0-PI/2之间也就是0-90度。Fovy/2处于0-45度 也就是说 x和y是随着fovy变大而减小的。如果愿意的话可以画一张图。。。
那我们就知道了这样一个事实――》假设一个立方体 如果我们设定fovy为PI/6时看到的大小为cube1,那么fovy设定为PI/3时的大小cube2  应有 cube1 > cube2
 
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/allenhiman/archive/2009/02/21/3918323.aspx
阅读(3489) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~