[Bf-committers] More Woody Goody
Johnny Matthews
johnny.matthews at gmail.com
Sat Mar 5 15:23:39 CET 2005
Chris,
Those samples look great. I will be trying your patch today.
Johnny
Chris Burt wrote:
> Here it is, version 4 of my wood upgrade patch. Future work in this
> area may include the ability to have a user-designed waveform for
> output. Thats a long way off though.. just a pipe dream. Anyway! It
> works :)
>
> AND the corresponding screen shots I promised:
>
> http://blender.spaceisbig.com/wood/index.htm
>
> Enjoy :)
>
> Regards,
> --Chris
>
>------------------------------------------------------------------------
>
>Index: source/blender/render/intern/source/texture.c
>===================================================================
>RCS file: /cvsroot/bf-blender/blender/source/blender/render/intern/source/texture.c,v
>retrieving revision 1.38
>diff -u -p -u -r1.38 texture.c
>--- source/blender/render/intern/source/texture.c 25 Feb 2005 12:19:42 -0000 1.38
>+++ source/blender/render/intern/source/texture.c 4 Mar 2005 03:18:21 -0000
>@@ -354,30 +354,71 @@ static int clouds(Tex *tex, float *texve
>
> }
>
>+/* creates a sine wave */
>+static float wood_sin(float a)
>+{
>+ a = 0.5 + 0.5*sin(a);
>+
>+ return a;
>+}
>+
>+/* creates a saw wave */
>+static float wood_saw(float a)
>+{
>+ const float b = 2*M_PI;
>+
>+ int n = (int)(a / b);
>+ a -= n*b;
>+ if (a < 0) a += b;
>+ return a / b;
>+}
>+
>+/* creates a triangle wave */
>+static float wood_tri(float a)
>+{
>+ const float b = 2*M_PI;
>+ const float rmax = 1.0;
>+
>+ a = rmax - 2.0*fabs(floor((a*(1.0/b))+0.5) - (a*(1.0/b)));
>+
>+ return a;
>+}
>+
> /* computes basic wood intensity value at x,y,z */
> static float wood_int(Tex *tex, float x, float y, float z)
> {
>- float wi=0;
>+ float wi=0;
>+ short wf = tex->noisebasis2; /* wave form: TEX_SIN=0, TEX_SAW=1, TEX_TRI=2 */
>+ short wt = tex->stype; /* wood type: TEX_BAND=0, TEX_RING=1, TEX_BANDNOISE=2, TEX_RINGNOISE=3 */
>
>- if (tex->stype==0)
>- wi = 0.5 + 0.5*sin((x + y + z)*10.0);
>- else if (tex->stype==1)
>- wi = 0.5 + 0.5*sin(sqrt(x*x + y*y + z*z)*20.0);
>- else if (tex->stype==2) {
>- wi = BLI_gNoise(tex->noisesize, x, y, z, (tex->noisetype!=TEX_NOISESOFT), tex->noisebasis);
>- wi = 0.5 + 0.5*sin(tex->turbul*wi + (x + y + z)*10.0);
>+ float (*waveform[3])(float); /* create array of pointers to waveform functions */
>+ waveform[0] = wood_sin; /* assign address of wood_sin() function to pointer array */
>+ waveform[1] = wood_saw;
>+ waveform[2] = wood_tri;
>+
>+ if ((wf>TEX_TRI) || (wf<TEX_SIN)) wf=0; /* check to be sure noisebasis2 is initialized ahead of time */
>+
>+ if (wt==TEX_BAND) {
>+ wi = waveform[wf]((x + y + z)*10.0);
> }
>- else if (tex->stype==3) {
>- wi = BLI_gNoise(tex->noisesize, x, y, z, (tex->noisetype!=TEX_NOISESOFT), tex->noisebasis);
>- wi = 0.5 + 0.5*sin(tex->turbul*wi + (sqrt(x*x + y*y + z*z))*20.0);
>+ else if (wt==TEX_RING) {
>+ wi = waveform[wf](sqrt(x*x + y*y + z*z)*20.0);
> }
>-
>+ else if (wt==TEX_BANDNOISE) {
>+ wi = tex->turbul*BLI_gNoise(tex->noisesize, x, y, z, (tex->noisetype!=TEX_NOISESOFT), tex->noisebasis);
>+ wi = waveform[wf]((x + y + z)*10.0 + wi);
>+ }
>+ else if (wt==TEX_RINGNOISE) {
>+ wi = tex->turbul*BLI_gNoise(tex->noisesize, x, y, z, (tex->noisetype!=TEX_NOISESOFT), tex->noisebasis);
>+ wi = waveform[wf](sqrt(x*x + y*y + z*z)*20.0 + wi);
>+ }
>+
> return wi;
> }
>
> static int wood(Tex *tex, float *texvec, TexResult *texres)
> {
>- int rv=0; /* return value, int:0, col:1, nor:2, everything:3 */
>+ int rv=TEX_INT; /* return value, int:0, col:1, nor:2, everything:3 */
>
> texres->tin = wood_int(tex, texvec[0], texvec[1], texvec[2]);
> if (texres->nor!=NULL) {
>@@ -387,7 +428,7 @@ static int wood(Tex *tex, float *texvec,
> texres->nor[2] = wood_int(tex, texvec[0], texvec[1], texvec[2] + tex->nabla);
>
> tex_normal_derivate(tex, texres);
>- rv += 2;
>+ rv = TEX_NOR;
> }
>
> BRICONT;
>Index: source/blender/makesdna/DNA_texture_types.h
>===================================================================
>RCS file: /cvsroot/bf-blender/blender/source/blender/makesdna/DNA_texture_types.h,v
>retrieving revision 1.17
>diff -u -p -u -r1.17 DNA_texture_types.h
>--- source/blender/makesdna/DNA_texture_types.h 27 Dec 2004 19:28:49 -0000 1.17
>+++ source/blender/makesdna/DNA_texture_types.h 4 Mar 2005 03:18:21 -0000
>@@ -243,6 +243,16 @@ typedef struct Tex {
> #define TEX_NOISESOFT 0
> #define TEX_NOISEPERL 1
>
>+/* tex->noisebasis2 in texture.c - wood waveforms */
>+#define TEX_SIN 0
>+#define TEX_SAW 1
>+#define TEX_TRI 2
>+/* tex->stype in texture.c - wood types */
>+#define TEX_BAND 0
>+#define TEX_RING 1
>+#define TEX_BANDNOISE 2
>+#define TEX_RINGNOISE 3
>+
> /* wrap */
> #define MTEX_FLAT 0
> #define MTEX_CUBE 1
>Index: source/blender/src/buttons_shading.c
>===================================================================
>RCS file: /cvsroot/bf-blender/blender/source/blender/src/buttons_shading.c,v
>retrieving revision 1.120
>diff -u -p -u -r1.120 buttons_shading.c
>--- source/blender/src/buttons_shading.c 2 Feb 2005 17:26:24 -0000 1.120
>+++ source/blender/src/buttons_shading.c 4 Mar 2005 03:18:22 -0000
>@@ -882,10 +882,13 @@ static void texture_panel_wood(Tex *tex)
> uiDefButS(block, ROW, B_TEXPRV, "Bands", 10, 180, 75, 18, &tex->stype, 2.0, 0.0, 0, 0, "Uses standard wood texture in bands");
> uiDefButS(block, ROW, B_TEXPRV, "Rings", 85, 180, 75, 18, &tex->stype, 2.0, 1.0, 0, 0, "Uses wood texture in rings");
> uiDefButS(block, ROW, B_TEXPRV, "BandNoise", 160, 180, 75, 18, &tex->stype, 2.0, 2.0, 0, 0, "Adds noise to standard wood");
>- uiDefButS(block, ROW, B_TEXPRV, "RingNoise", 235, 180, 75, 18, &tex->stype, 2.0, 3.0, 0, 0, "Adds noise to rings");
>-
>- uiDefButS(block, ROW, B_TEXPRV, "Soft noise", 10, 160, 150, 19, &tex->noisetype, 12.0, 0.0, 0, 0, "Generates soft noise");
>- uiDefButS(block, ROW, B_TEXPRV, "Hard noise", 160, 160, 150, 19, &tex->noisetype, 12.0, 1.0, 0, 0, "Generates hard noise");
>+ uiDefButS(block, ROW, B_TEXPRV, "RingNoise", 235, 180, 75, 18, &tex->stype, 2.0, 3.0, 0, 0, "Adds noise to rings");
>+
>+ uiDefButS(block, ROW, B_TEXPRV, "Sin", 10, 160, 50, 19, &tex->noisebasis2, 8.0, 0.0, 0, 0, "Uses a sine wave to produce bands.");
>+ uiDefButS(block, ROW, B_TEXPRV, "Saw", 60, 160, 50, 19, &tex->noisebasis2, 8.0, 1.0, 0, 0, "Uses a saw wave to produce bands.");
>+ uiDefButS(block, ROW, B_TEXPRV, "Tri", 110, 160, 50, 19, &tex->noisebasis2, 8.0, 2.0, 0, 0, "Uses a triangle wave to produce bands.");
>+ uiDefButS(block, ROW, B_TEXPRV, "Soft noise", 160, 160, 75, 19, &tex->noisetype, 12.0, 0.0, 0, 0, "Generates soft noise");
>+ uiDefButS(block, ROW, B_TEXPRV, "Hard noise", 235, 160, 75, 19, &tex->noisetype, 12.0, 1.0, 0, 0, "Generates hard noise");
>
> uiBlockBeginAlign(block);
> uiDefButF(block, NUM, B_TEXPRV, "NoiseSize :", 10, 130, 150, 19, &tex->noisesize, 0.0001, 2.0, 10, 0, "Sets scaling for noise input");
>
>
>------------------------------------------------------------------------
>
>_______________________________________________
>Bf-committers mailing list
>Bf-committers at projects.blender.org
>http://projects.blender.org/mailman/listinfo/bf-committers
>
>
More information about the Bf-committers
mailing list