品雪
pinxue@hotmail.com http://pinxue.yeah.net
01-8-14 下午 10:55:05
glOrtho(left,right,bottom,top,near,far)的效果是:
| 2 |
|---------- 0 0 t |
|right-left x |
| 2 |
| 0 ---------- 0 t |
| top-bottom y |
| -2 |
| 0 0 -------- t |
| far-near z |
| |
| 0 0 0 1 |
where
right+left
t = - ----------
x right-left
top+bottom
t = - ----------
y top-bottom
far+near
t = - --------
z far-near
除了定义x=left或right、y=bottom或top、z=-near或-far的六个裁剪面之外,还定义了一个正投影体。
简单起见,令l=-1 r=1 t=1 b =-1,专门研究 near far的影响,上式变成:
| x | |1 0 0 0|
| y | |0 1 0 0|
| z | * |0 0 a b| = [x,y,az+b,1]
| 1 | |0 0 0 1|
可见在正投影中,在此种投影变换矩阵作用下,x,y坐标是不变的,改变的是z坐标
z ==> az+b
其中 a= -2/(far - near) 而 b = - (far + near) / (far - near)
来看几种典型组合:
|
near
|
far
|
a=-2/(f-n)
|
b=-(f+n)/(f-n)
|
z'=az+b
|
(x,y,0)w
|
(x,y,1)w
|
(x,y,-1)w
|
临界z坐标 |
|
0
|
1
|
-2
|
-1
|
-2z-1
|
(x,y,-1)e
|
(x,y,-3)e
|
(x,y,+1)e
|
z>0,z<-1 |
|
1
|
0
|
2
|
1
|
2z+1
|
(x,y,+1)e
|
(x,y,+3)e
|
(x,y,-1)e
|
z>0,z<-1 |
|
-1
|
1
|
-1
|
0
|
-z
|
(x,y,0)e
|
(x,y,-1)e
|
(x,y,1)e
|
z>1,z<-1 |
|
-1
|
0
|
-2
|
1
|
-2z+1
|
(x,y,+1)e
|
(x,y,-1)e
|
(x,y,3)e
|
z>1,z<0 |
|
-1
|
-2
|
2
|
-3
|
2z-3
|
(x,y,-3)e
|
(x,y,-1)e
|
(x,y,-5)e
|
z>2,z<1 |
|
0
|
4
|
-0.5
|
-1
|
-0.5z-1
|
(x,y,-1)e
|
(x,y,-1.5)e
|
(x,y,-0.5)e
|
z<-4,z>0 |
可见:
以上对near/far的分析显然同样适用于其它轴。