diff options
author | Ton Roosendaal <ton@blender.org> | 2005-06-08 16:51:03 +0400 |
---|---|---|
committer | Ton Roosendaal <ton@blender.org> | 2005-06-08 16:51:03 +0400 |
commit | 5e0aa9b1eced8cb37f735ed9efd5d1be607267b8 (patch) | |
tree | a5a3c1a493efcbf19e6027763c7c42ef82626313 /source/blender/render/intern | |
parent | ae77736c30760bb60954e6e562f1e3c9cfae2349 (diff) |
Bug fix #2719
Ortho render didn't correct texture/shadow coordinates for subpixel
position. Caused small errors where faces intersect each other.
Also found texture subpixel error in unified (using jitter table not
correctly). This also caused errors with z value comparing.
Diffstat (limited to 'source/blender/render/intern')
-rw-r--r-- | source/blender/render/intern/source/rendercore.c | 4 | ||||
-rw-r--r-- | source/blender/render/intern/source/vanillaRenderPipe.c | 16 |
2 files changed, 13 insertions, 7 deletions
diff --git a/source/blender/render/intern/source/rendercore.c b/source/blender/render/intern/source/rendercore.c index ee902cb9710..6f57a05e030 100644 --- a/source/blender/render/intern/source/rendercore.c +++ b/source/blender/render/intern/source/rendercore.c @@ -2125,8 +2125,8 @@ void *shadepixel(float x, float y, int z, int facenr, int mask, float *col) float fx= 2.0/(R.rectx*R.winmat[0][0]); float fy= 2.0/(R.recty*R.winmat[1][1]); - shi.co[0]= (x - 0.5*R.rectx)*fx - R.winmat[3][0]/R.winmat[0][0]; - shi.co[1]= (y - 0.5*R.recty)*fy - R.winmat[3][1]/R.winmat[1][1]; + shi.co[0]= (0.5 + x - 0.5*R.rectx)*fx - R.winmat[3][0]/R.winmat[0][0]; + shi.co[1]= (0.5 + y - 0.5*R.recty)*fy - R.winmat[3][1]/R.winmat[1][1]; /* using a*x + b*y + c*z = d equation, (a b c) is normal */ shi.co[2]= (dface - shi.facenor[0]*shi.co[0] - shi.facenor[1]*shi.co[1])/shi.facenor[2]; diff --git a/source/blender/render/intern/source/vanillaRenderPipe.c b/source/blender/render/intern/source/vanillaRenderPipe.c index 6a2ccd5c566..053b5886bff 100644 --- a/source/blender/render/intern/source/vanillaRenderPipe.c +++ b/source/blender/render/intern/source/vanillaRenderPipe.c @@ -641,9 +641,15 @@ static int composeStack(int zrow[][RE_PIXELFIELDSIZE], RE_COLBUFTYPE *collector, stack[ptr].data= vlr; } else { - i= centmask[ zrow[totvlak][RE_MASK] ]; /* recenter sample position - */ - xs= (float)x+centLut[i & 15]; - ys= (float)y+centLut[i >> 4]; + if(R.osa) { + i= centmask[ zrow[totvlak][RE_MASK] ]; /* recenter sample position - */ + xs= (float)x+centLut[i & 15]; + ys= (float)y+centLut[i >> 4]; + } + else { + xs= (float)x; + ys= (float)y; + } /* stack face ----------- */ stack[ptr].mask = zrow[totvlak][RE_MASK]; @@ -771,8 +777,8 @@ static int calcDepth(float x, float y, void *data, int type) float fx= 2.0/(R.rectx*R.winmat[0][0]); float fy= 2.0/(R.recty*R.winmat[1][1]); - fx= (x - 0.5*R.rectx)*fx - R.winmat[3][0]/R.winmat[0][0]; - fy= (y - 0.5*R.recty)*fy - R.winmat[3][1]/R.winmat[1][1]; + fx= (0.5 + x - 0.5*R.rectx)*fx - R.winmat[3][0]/R.winmat[0][0]; + fy= (0.5 + y - 0.5*R.recty)*fy - R.winmat[3][1]/R.winmat[1][1]; /* using a*x + b*y + c*z = d equation, (a b c) is normal */ zco= (dface - vlr->n[0]*fx - vlr->n[1]*fy)/vlr->n[2]; |