diff options
author | Ton Roosendaal <ton@blender.org> | 2006-02-23 23:18:29 +0300 |
---|---|---|
committer | Ton Roosendaal <ton@blender.org> | 2006-02-23 23:18:29 +0300 |
commit | d9aac9d9b84825c8baef8e82be7ce465673e932e (patch) | |
tree | d824462e8ac70d67bf730dd2b47147cda44536da | |
parent | 977c201bc0d795a96a3cc8eb80f9327dc7bb5f4b (diff) |
Bugfix for very very ancient envmap error. When you scale the envmap
object the OSA filtersize inverse scaled as well. Made small scaled
envmap objects far to blurry.
-rw-r--r-- | source/blender/makesdna/DNA_texture_types.h | 2 | ||||
-rw-r--r-- | source/blender/render/intern/source/envmap.c | 21 |
2 files changed, 15 insertions, 8 deletions
diff --git a/source/blender/makesdna/DNA_texture_types.h b/source/blender/makesdna/DNA_texture_types.h index 6711ffbf3a8..ea49e7d0e6b 100644 --- a/source/blender/makesdna/DNA_texture_types.h +++ b/source/blender/makesdna/DNA_texture_types.h @@ -112,13 +112,13 @@ typedef struct EnvMap { struct Image *ima; /* type ENV_LOAD */ struct Image *cube[6]; /* these images are dynamic, not part of the main struct */ float imat[4][4]; + float obimat[3][3]; short type, stype; float clipsta, clipend; unsigned int notlay; short cuberes, depth; short ok, lastframe; short recalc, lastsize; - int pad1; } EnvMap; typedef struct Tex { diff --git a/source/blender/render/intern/source/envmap.c b/source/blender/render/intern/source/envmap.c index 44c874f06ee..b173be4bc9b 100644 --- a/source/blender/render/intern/source/envmap.c +++ b/source/blender/render/intern/source/envmap.c @@ -355,6 +355,7 @@ static void render_envmap(Render *re, EnvMap *env) Render *envre; ImBuf *ibuf; Image *ima; + float orthmat[4][4]; float oldviewinv[4][4], mat[4][4], tmat[4][4]; short part; @@ -363,14 +364,20 @@ static void render_envmap(Render *re, EnvMap *env) envre= envmap_render_copy(re, env); -// re->display_init(envre->result); + /* precalc orthmat for object */ + MTC_Mat4CpyMat4(orthmat, env->object->obmat); + MTC_Mat4Ortho(orthmat); + + /* need imat later for texture imat */ + MTC_Mat4MulMat4(mat, orthmat, re->viewmat); + MTC_Mat4Invert(tmat, mat); + MTC_Mat3CpyMat4(env->obimat, tmat); for(part=0; part<6; part++) { re->display_clear(envre->result); - MTC_Mat4CpyMat4(tmat, env->object->obmat); - MTC_Mat4Ortho(tmat); + MTC_Mat4CpyMat4(tmat, orthmat); envmap_transmatrix(tmat, part); MTC_Mat4Invert(mat, tmat); /* mat now is the camera 'viewmat' */ @@ -488,7 +495,7 @@ void make_envmaps(Render *re) if(do_init) { re->display_init(re->result); re->display_clear(re->result); - re->flag |= R_REDRAW_PRV; + // re->flag |= R_REDRAW_PRV; } // restore re->r.mode |= trace; @@ -603,7 +610,7 @@ int envmaptex(Tex *tex, float *texvec, float *dxt, float *dyt, int osatex, TexRe /* rotate to envmap space, if object is set */ VECCOPY(vec, texvec); - if(env->object) MTC_Mat4Mul3Vecfl(env->object->imat, vec); + if(env->object) MTC_Mat3MulVecfl(env->obimat, vec); else MTC_Mat4Mul3Vecfl(R.viewinv, vec); face= envcube_isect(vec, sco); @@ -611,8 +618,8 @@ int envmaptex(Tex *tex, float *texvec, float *dxt, float *dyt, int osatex, TexRe if(osatex) { if(env->object) { - MTC_Mat4Mul3Vecfl(env->object->imat, dxt); - MTC_Mat4Mul3Vecfl(env->object->imat, dyt); + MTC_Mat3MulVecfl(env->obimat, dxt); + MTC_Mat3MulVecfl(env->obimat, dyt); } else { MTC_Mat4Mul3Vecfl(R.viewinv, dxt); |