diff options
author | Campbell Barton <ideasman42@gmail.com> | 2011-11-15 06:58:06 +0400 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2011-11-15 06:58:06 +0400 |
commit | e6e265b2b59e02cc7816a2ed43471eca8bca0a62 (patch) | |
tree | e312d2c2f6cb1aaf79148648e5725902ab23d34e /source/blender/render | |
parent | e59ab6486f9e7285815671044b785c28365d5165 (diff) | |
parent | 3442c16c09b31a23f45b23be72e6eb5ba02c7bbf (diff) |
svn merge -r41779:41847 ^/trunk/blender
Diffstat (limited to 'source/blender/render')
-rw-r--r-- | source/blender/render/CMakeLists.txt | 2 | ||||
-rw-r--r-- | source/blender/render/intern/include/texture_ocean.h | 28 | ||||
-rw-r--r-- | source/blender/render/intern/source/convertblender.c | 2 | ||||
-rw-r--r-- | source/blender/render/intern/source/render_texture.c | 11 | ||||
-rw-r--r-- | source/blender/render/intern/source/shadeoutput.c | 2 | ||||
-rw-r--r-- | source/blender/render/intern/source/texture_ocean.c | 157 |
6 files changed, 200 insertions, 2 deletions
diff --git a/source/blender/render/CMakeLists.txt b/source/blender/render/CMakeLists.txt index 763cd3780fb..c7b27c3cd7e 100644 --- a/source/blender/render/CMakeLists.txt +++ b/source/blender/render/CMakeLists.txt @@ -74,6 +74,7 @@ set(SRC intern/source/sss.c intern/source/strand.c intern/source/sunsky.c + intern/source/texture_ocean.c intern/source/volume_precache.c intern/source/volumetric.c intern/source/voxeldata.c @@ -104,6 +105,7 @@ set(SRC intern/include/strand.h intern/include/sunsky.h intern/include/texture.h + intern/include/texture_ocean.h intern/include/volume_precache.h intern/include/volumetric.h intern/include/voxeldata.h diff --git a/source/blender/render/intern/include/texture_ocean.h b/source/blender/render/intern/include/texture_ocean.h new file mode 100644 index 00000000000..b0a0647d115 --- /dev/null +++ b/source/blender/render/intern/include/texture_ocean.h @@ -0,0 +1,28 @@ +/* + * ***** BEGIN GPL LICENSE BLOCK ***** + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV. + * All rights reserved. + * + * Contributors: Matt Ebb + * + * ***** END GPL LICENSE BLOCK ***** + */ + +void prepare_ocean_tex_modifier(struct OceanTex *ot); + +int ocean_texture(struct Tex *tex, float *texvec, struct TexResult *texres); diff --git a/source/blender/render/intern/source/convertblender.c b/source/blender/render/intern/source/convertblender.c index 7d301389eed..894dffd39b0 100644 --- a/source/blender/render/intern/source/convertblender.c +++ b/source/blender/render/intern/source/convertblender.c @@ -5264,7 +5264,7 @@ static void speedvector_project(Render *re, float zco[2], const float co[3], con if(vec[0]<0.0f) ang= -ang; zco[0]= ang/pixelphix + zmulx; - ang= 0.5f*M_PI - saacos(vec[1]/sqrtf(vec[0]*vec[0] + vec[1]*vec[1] + vec[2]*vec[2])); + ang= 0.5f*(float)M_PI - saacos(vec[1]/sqrtf(vec[0]*vec[0] + vec[1]*vec[1] + vec[2]*vec[2])); zco[1]= ang/pixelphiy + zmuly; } diff --git a/source/blender/render/intern/source/render_texture.c b/source/blender/render/intern/source/render_texture.c index 7ed6050d7d3..2d45b9c4ea9 100644 --- a/source/blender/render/intern/source/render_texture.c +++ b/source/blender/render/intern/source/render_texture.c @@ -79,6 +79,7 @@ #include "rendercore.h" #include "shading.h" #include "texture.h" +#include "texture_ocean.h" #include "renderdatabase.h" /* needed for UV */ @@ -1264,7 +1265,9 @@ static int multitex(Tex *tex, float *texvec, float *dxt, float *dyt, int osatex, case TEX_VOXELDATA: retval= voxeldatatex(tex, texvec, texres); break; - + case TEX_OCEAN: + retval= ocean_texture(tex, texvec, texres); + break; } if (tex->flag & TEX_COLORBAND) { @@ -2193,6 +2196,12 @@ void do_material_tex(ShadeInput *shi, Render *re) use_ntap_bump = 0; use_compat_bump = 1; } + + /* case ocean */ + if(tex->type == TEX_OCEAN) { + use_ntap_bump = 0; + use_compat_bump = 0; + } /* which coords */ if(mtex->texco==TEXCO_ORCO) { diff --git a/source/blender/render/intern/source/shadeoutput.c b/source/blender/render/intern/source/shadeoutput.c index e1f521db066..b58a6695fd6 100644 --- a/source/blender/render/intern/source/shadeoutput.c +++ b/source/blender/render/intern/source/shadeoutput.c @@ -55,6 +55,8 @@ #include "sss.h" #include "texture.h" +#include "shading.h" /* own include */ + /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ /* defined in pipeline.c, is hardcopy of active dynamic allocated Render */ /* only to be used here in this file, it's for speed */ diff --git a/source/blender/render/intern/source/texture_ocean.c b/source/blender/render/intern/source/texture_ocean.c new file mode 100644 index 00000000000..c13347dc162 --- /dev/null +++ b/source/blender/render/intern/source/texture_ocean.c @@ -0,0 +1,157 @@ +/* + * ***** BEGIN GPL LICENSE BLOCK ***** + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV. + * All rights reserved. + * + * Contributors: Matt Ebb + * + * ***** END GPL LICENSE BLOCK ***** + */ + +#include <stddef.h> + +#include "BLI_math.h" +#include "BLI_utildefines.h" + +#include "DNA_modifier_types.h" +#include "DNA_object_types.h" +#include "DNA_texture_types.h" + +#include "BKE_global.h" /* XXX */ + +#include "BKE_modifier.h" +#include "BKE_ocean.h" +#include "BKE_utildefines.h" + +#include "render_types.h" +#include "RE_shader_ext.h" + +#include "texture.h" + + +/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ +/* defined in pipeline.c, is hardcopy of active dynamic allocated Render */ +/* only to be used here in this file, it's for speed */ +extern struct Render R; +/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ + + + + +/* ***** actual texture sampling ***** */ +int ocean_texture(Tex *tex, float *texvec, TexResult *texres) +{ + OceanTex *ot= tex->ot; + ModifierData *md; + OceanModifierData *omd; + + texres->tin = 0.0f; + + if ( !(ot) || + !(ot->object) || + !(md = (ModifierData *)modifiers_findByType(ot->object, eModifierType_Ocean)) || + !(omd= (OceanModifierData *)md)->ocean) + { + return 0; + } + else { + const int do_normals = (omd->flag & MOD_OCEAN_GENERATE_NORMALS); + int cfra = R.r.cfra; + int retval = TEX_INT; + + OceanResult ocr; + const float u = 0.5f+0.5f*texvec[0]; + const float v = 0.5f+0.5f*texvec[1]; + + if (omd->oceancache && omd->cached==TRUE) { + + CLAMP(cfra, omd->bakestart, omd->bakeend); + cfra -= omd->bakestart; // shift to 0 based + + BKE_ocean_cache_eval_uv(omd->oceancache, &ocr, cfra, u, v); + + } + else { // non-cached + + if (G.rendering) + BKE_ocean_eval_uv_catrom(omd->ocean, &ocr, u, v); + else + BKE_ocean_eval_uv(omd->ocean, &ocr, u, v); + + ocr.foam = BKE_ocean_jminus_to_foam(ocr.Jminus, omd->foam_coverage); + } + + switch (ot->output) { + case TEX_OCN_DISPLACEMENT: + /* XYZ displacement */ + texres->tr = 0.5f + 0.5f * ocr.disp[0]; + texres->tg = 0.5f + 0.5f * ocr.disp[2]; + texres->tb = 0.5f + 0.5f * ocr.disp[1]; + + texres->tr = MAX2(0.0f, texres->tr); + texres->tg = MAX2(0.0f, texres->tg); + texres->tb = MAX2(0.0f, texres->tb); + + BRICONTRGB; + + retval = TEX_RGB; + break; + + case TEX_OCN_EMINUS: + /* -ve eigenvectors ? */ + texres->tr = ocr.Eminus[0]; + texres->tg = ocr.Eminus[2]; + texres->tb = ocr.Eminus[1]; + retval = TEX_RGB; + break; + + case TEX_OCN_EPLUS: + /* -ve eigenvectors ? */ + texres->tr = ocr.Eplus[0]; + texres->tg = ocr.Eplus[2]; + texres->tb = ocr.Eplus[1]; + retval = TEX_RGB; + break; + + case TEX_OCN_JPLUS: + texres->tin = ocr.Jplus; + retval = TEX_INT; + break; + + case TEX_OCN_FOAM: + + texres->tin = ocr.foam; + + BRICONT; + + retval = TEX_INT; + break; + } + + /* if normals needed */ + + if (texres->nor && do_normals) { + normalize_v3_v3(texres->nor, ocr.normal); + retval |= TEX_NOR; + } + + texres->ta = 1.0f; + + return retval; + } +} |