diff options
author | Ton Roosendaal <ton@blender.org> | 2006-01-12 02:15:48 +0300 |
---|---|---|
committer | Ton Roosendaal <ton@blender.org> | 2006-01-12 02:15:48 +0300 |
commit | d4f48f43ef01a55d5ac519efbf98f5861e4a5ab7 (patch) | |
tree | 3734073ad52a372523624d747ba6afa348933c24 /source/blender/render | |
parent | 0665f0d64799e6a38c4ca0930df73271f246e422 (diff) |
Orange: Ortho camera now gives correct z values for buffers too.
Diffstat (limited to 'source/blender/render')
-rw-r--r-- | source/blender/render/intern/source/initrender.c | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/source/blender/render/intern/source/initrender.c b/source/blender/render/intern/source/initrender.c index 948c1179b3b..baa908cc9b2 100644 --- a/source/blender/render/intern/source/initrender.c +++ b/source/blender/render/intern/source/initrender.c @@ -812,7 +812,7 @@ static void addparttorect(Part *pa) static void convert_zbuf_to_distbuf(void) { float *rectzf, zco; - int a, *rectz; + int a, *rectz, ortho= R.r.mode & R_ORTHO; if(R.rectz==NULL) return; if(R.rectzf) { @@ -827,7 +827,7 @@ static void convert_zbuf_to_distbuf(void) R.yend= R.ystart+R.recty-1; RE_setwindowclip(0, -1); - + rectzf= R.rectzf= MEM_mallocN(R.rectx*R.recty*sizeof(float), "rectzf"); rectz= R.rectz; @@ -835,8 +835,15 @@ static void convert_zbuf_to_distbuf(void) if(*rectz==0x7FFFFFFF) *rectzf= 10e10; else { + /* inverse of zbuf calc: zbuf = MAXZ*hoco_z/hoco_w */ + /* or: (R.winmat[3][2] - zco*R.winmat[3][3])/(R.winmat[2][2] - R.winmat[2][3]*zco); */ + /* if ortho [2][3] is zero, else [3][3] is zero */ + zco= ((float)*rectz)/2147483647.0f; - *rectzf= R.winmat[3][2]/(R.winmat[2][2] - R.winmat[2][3]*zco); + if(ortho) + *rectzf= (R.winmat[3][2] - zco*R.winmat[3][3])/(R.winmat[2][2]); + else + *rectzf= (R.winmat[3][2])/(R.winmat[2][2] - R.winmat[2][3]*zco); } } |