Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTon Roosendaal <ton@blender.org>2006-01-12 02:15:48 +0300
committerTon Roosendaal <ton@blender.org>2006-01-12 02:15:48 +0300
commitd4f48f43ef01a55d5ac519efbf98f5861e4a5ab7 (patch)
tree3734073ad52a372523624d747ba6afa348933c24 /source/blender/render
parent0665f0d64799e6a38c4ca0930df73271f246e422 (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.c13
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);
}
}