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 /source/blender | |
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.
Diffstat (limited to 'source/blender')
-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); |