[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [11408] branches/soc-2007-maike: Added glsl colorband rgb_to_hsv and hsv_to_rgb equivalent functions concatenation and corrected some colorband blend functions

Miguel Torres Lima torreslima at gmail.com
Sat Jul 28 19:30:54 CEST 2007


Revision: 11408
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=11408
Author:   maike
Date:     2007-07-28 19:30:54 +0200 (Sat, 28 Jul 2007)

Log Message:
-----------
Added glsl colorband rgb_to_hsv and hsv_to_rgb equivalent functions concatenation and corrected some colorband blend functions

Modified Paths:
--------------
    branches/soc-2007-maike/release/glsl/colorband_blend_color.gsl
    branches/soc-2007-maike/release/glsl/colorband_blend_light.gsl
    branches/soc-2007-maike/release/glsl/colorband_blend_sat.gsl
    branches/soc-2007-maike/release/glsl/colorband_blend_val.gsl
    branches/soc-2007-maike/release/glsl/colorband_hsv_rgb.gsl
    branches/soc-2007-maike/release/glsl/colorband_rgb_hsv.gsl
    branches/soc-2007-maike/release/glsl/light_calc.gsl
    branches/soc-2007-maike/source/blender/src/glsl_colorband.c
    branches/soc-2007-maike/source/blender/src/glsl_colorband_node.c

Added Paths:
-----------
    branches/soc-2007-maike/release/glsl/tex_magic.gsl

Modified: branches/soc-2007-maike/release/glsl/colorband_blend_color.gsl
===================================================================
--- branches/soc-2007-maike/release/glsl/colorband_blend_color.gsl	2007-07-28 16:28:40 UTC (rev 11407)
+++ branches/soc-2007-maike/release/glsl/colorband_blend_color.gsl	2007-07-28 17:30:54 UTC (rev 11408)
@@ -3,11 +3,11 @@
   float facm = 1.0 - fac;
   vec3 color = colband;
   
-  vec3 tmp = colorband_rbg_hsv(shader);
+  vec3 tmp = colorband_rgb_hsv(shader);
 
   if(tmp.g != 0.0){
     vec3 tmp2 = colorband_rgb_hsv(colband);
-    vec3 tmp3 = colorband_hsv_rgb(tmp.r, tmp.g, tmp2.b);
+    vec3 tmp3 = colorband_hsv_rgb(vec3(tmp.r, tmp.g, tmp2.b));
     color.r = facm * colband.r + fac * tmp3.r;
     color.g = facm * colband.g + fac * tmp3.g;
     color.b = facm * colband.b + fac * tmp3.b;

Modified: branches/soc-2007-maike/release/glsl/colorband_blend_light.gsl
===================================================================
--- branches/soc-2007-maike/release/glsl/colorband_blend_light.gsl	2007-07-28 16:28:40 UTC (rev 11407)
+++ branches/soc-2007-maike/release/glsl/colorband_blend_light.gsl	2007-07-28 17:30:54 UTC (rev 11408)
@@ -1,18 +1,19 @@
 vec3 colorband_blend_light(vec3 shader, vec3 colband, float fac)
 {
   vec3 color = colband;
-  float tmp =  fac * colband.r;
+  float tmp =  fac * shader.r;
 
   if(tmp > colband.r)
     color.r = tmp;
 
-  tmp = fac * colband.g;
+  tmp = fac * shader.g;
   if(tmp > colband.g)
     color.g = tmp;
-
-  tmp = fac * colband.b;
+  
+  tmp = fac * shader.b;
   if(tmp > colband.b)
     color.b = tmp;
 
   return color;
 }
+

Modified: branches/soc-2007-maike/release/glsl/colorband_blend_sat.gsl
===================================================================
--- branches/soc-2007-maike/release/glsl/colorband_blend_sat.gsl	2007-07-28 16:28:40 UTC (rev 11407)
+++ branches/soc-2007-maike/release/glsl/colorband_blend_sat.gsl	2007-07-28 17:30:54 UTC (rev 11408)
@@ -6,7 +6,7 @@
   vec3 tmp = colorband_rgb_hsv(colband);
   if(tmp.g != 0.0){
     vec3 tmp2 = colorband_rgb_hsv(shader);
-    color = colorband_hsv_rgb(tmp.r, facm * tmp.g + fac * tmp2.g, tmp.b);
+    color = colorband_hsv_rgb(vec3(tmp.r, facm * tmp.g + fac * tmp2.g, tmp.b));
   }
 
   return color;

Modified: branches/soc-2007-maike/release/glsl/colorband_blend_val.gsl
===================================================================
--- branches/soc-2007-maike/release/glsl/colorband_blend_val.gsl	2007-07-28 16:28:40 UTC (rev 11407)
+++ branches/soc-2007-maike/release/glsl/colorband_blend_val.gsl	2007-07-28 17:30:54 UTC (rev 11408)
@@ -5,7 +5,7 @@
 
   vec3 tmp = colorband_rgb_hsv(colband);
   vec3 tmp2 = colorband_rgb_hsv(shader);
-  color = colorband_hsv_rgb(tmp.r, tmp.g, facm * tmp.b + fac * tmp2.b);
+  color = colorband_hsv_rgb(vec3(tmp.r, tmp.g, facm * tmp.b + fac * tmp2.b));
   
   return color;
 }

Modified: branches/soc-2007-maike/release/glsl/colorband_hsv_rgb.gsl
===================================================================
--- branches/soc-2007-maike/release/glsl/colorband_hsv_rgb.gsl	2007-07-28 16:28:40 UTC (rev 11407)
+++ branches/soc-2007-maike/release/glsl/colorband_hsv_rgb.gsl	2007-07-28 17:30:54 UTC (rev 11408)
@@ -14,22 +14,23 @@
     i = tmp.r;
     f = tmp.r - i;
     w = tmp.b * (1.0 - tmp.g);
-    q = tmp.b * (1.0 - (tmp.g - f));
+    q = tmp.b * (1.0 - (tmp.g * f));
     t = tmp.b * (1.0 - (tmp.g * (1.0 - f)));
 
-    if(i <= 0.0)
-      color = vec3(v, t, w);
-    else if(i <= 1.0)
-      color = vec3(q, v, w);
-    else if(i <= 2.0)
-      color = vec3(w, v, t);
-    else if(i <= 3.0)
-      color = vec3(w, q, v);
-    else if(i <= 4.0)
-      color = vec3(t, w, v);
-    else if(i <= 5.0)
-      color = vec3(v, w, q);
+    if(i >= 0.0)
+      color = vec3(input.b, t, w);
+    if(i >= 1.0)
+      color = vec3(q, input.b, w);
+    if(i >= 2.0)
+      color = vec3(w, input.b, t);
+    if(i >= 3.0)
+      color = vec3(w, q, input.b);
+    if(i >= 4.0)
+      color = vec3(t, w, input.b);
+    if(i >= 5.0)
+      color = vec3(input.b, w, q);
   }
 
   return(color);
 }
+

Modified: branches/soc-2007-maike/release/glsl/colorband_rgb_hsv.gsl
===================================================================
--- branches/soc-2007-maike/release/glsl/colorband_rgb_hsv.gsl	2007-07-28 16:28:40 UTC (rev 11407)
+++ branches/soc-2007-maike/release/glsl/colorband_rgb_hsv.gsl	2007-07-28 17:30:54 UTC (rev 11408)
@@ -1,13 +1,14 @@
 vec3 colorband_rgb_hsv(vec3 input)
 {
-  vec3 color = vec3(0.0, 0.0, 0.0);
-  float max = max(max(input.r, input.g), input.b);
-  float min = min(min(input.r, input.g), input.b);
+  vec3 color = input;
+  float maxn = max(max(input.r, input.g), input.b);
+  float minn = min(min(input.r, input.g), input.b);
+  float delta;
 
-  color.b = max;
+  color.b = maxn;
 
-  if(max != 0.0)
-    color.g = (max - min) / max;
+  if(maxn != 0.0)
+    color.g = (maxn - minn) / maxn;
   else
     color.g = 0.0;
 
@@ -15,15 +16,15 @@
     color.b = -1.0;
 
   else{
-    float delta =  max - min;
-    if(input.r == max)
-      color.r = (inputg - input.b) / delta;
-    else if(input.g == max)
+    delta =  maxn - minn;
+    if(input.r == maxn)
+      color.r = (input.g - input.b) / delta;
+    else if(input.g == maxn)
       color.r = 2.0 + (input.b - input.r) / delta;
-    else if(input.b == max)
+    else if(input.b == maxn)
       color.r = 4.0 + (input.r - input.g) / delta;
 
-    color.r = color.r * 60;
+    color.r = color.r * 60.0;
 
     if(color.r < 0.0)
       color.r = color.r + 360.0;

Modified: branches/soc-2007-maike/release/glsl/light_calc.gsl
===================================================================
--- branches/soc-2007-maike/release/glsl/light_calc.gsl	2007-07-28 16:28:40 UTC (rev 11407)
+++ branches/soc-2007-maike/release/glsl/light_calc.gsl	2007-07-28 17:30:54 UTC (rev 11408)
@@ -25,7 +25,7 @@
 #ifdef HEMI
 diff_rslt+= (DIFF_SHADER_ID(lights[LIGHT_ID], normal) * diff1 * diff_color * vec3(lights[LIGHT_ID].color + vert_color) * lights[LIGHT_ID].layer * lights[LIGHT_ID].energy * vis) + (diff_color * emit);
 #else
-diff_rslt+= (DIFF_SHADER_ID(lights[LIGHT_ID], normal, diff2, diff3) * diff1 * diff_color * vec3(lights[LIGHT_ID].color + vert_color) * lights[LIGHT_ID].layer * lights[LIGHT_ID].energy * vis) + (diff_color * emit);	
+diff_rslt+= (DIFF_SHADER_ID(lights[LIGHT_ID], normal, diff2, diff3) * diff1 * diff_color * vec3(lights[LIGHT_ID].color + vert_color) * lights[LIGHT_ID].layer * lights[LIGHT_ID].energy * vis) + (diff_color * emit);
 #endif
 #endif
 #endif

Added: branches/soc-2007-maike/release/glsl/tex_magic.gsl
===================================================================
--- branches/soc-2007-maike/release/glsl/tex_magic.gsl	                        (rev 0)
+++ branches/soc-2007-maike/release/glsl/tex_magic.gsl	2007-07-28 17:30:54 UTC (rev 11408)
@@ -0,0 +1,70 @@
+vec3 magic(vec3 coords, float depth, float turbulence)
+{
+  float x, y, z;
+  
+  x = sin((coords.x + coords.y + coords.z) * 5.0);
+  y = cos((-coords.x + coords.y - coords.z) * 5.0);
+  z = -cos((-coords.x - coords.y + coords.z) * 5.0);
+
+  if(depth > 0){
+    x *= turbulence;
+    y *= turbulence;
+    z *= turbulence;
+    
+    y = -cos(x-y+z);
+    y *= turbulence;
+
+    if(depth > 1){
+      x = cos(x-y-z);
+      x *= turbulence;
+
+      if(depth > 2){
+	z = sin(-x-y-z);
+	z *= turbulence;
+
+	if(depth > 3){
+	  x = -cos(-x+y-z);
+	  x *= turbulence;
+
+	  if(depth > 4){
+	    y = -sin(-x+y+z);
+	    y *= turbulence;
+
+	    if(depth > 5){
+	      y = -cos(-x+y+z);
+	      y *= turbulence;
+
+	      if(depth > 6){
+		x = cos(x+y+z);
+		x *= turbulence;
+
+		if(depth > 7){
+		  z = sin(x+y-z);
+		  z *= turbulence;
+
+		  if(depth > 8){
+		    x = -cos(-x-y+z);
+		    x *= turbulence;
+
+		    if(depth > 9){
+		      y = -sin(x-y+z);
+		      y *= turbulence;
+		    }
+		  }
+		}
+	      }
+	    }
+	  }
+	}
+      }
+    }
+  }
+
+  if(turbulence > 0.0){
+    x = x / (turbulence * 2.0);
+    y = y / (turbulence * 2.0);
+    z = z / (turbulence * 2.0);
+  }
+
+  return(0.5 - x, 0.5 - y, 0.5 - z);
+}

Modified: branches/soc-2007-maike/source/blender/src/glsl_colorband.c
===================================================================
--- branches/soc-2007-maike/source/blender/src/glsl_colorband.c	2007-07-28 16:28:40 UTC (rev 11407)
+++ branches/soc-2007-maike/source/blender/src/glsl_colorband.c	2007-07-28 17:30:54 UTC (rev 11408)
@@ -60,8 +60,8 @@
   glGenTextures(1, &colorband->texid);
   glActiveTexture(GL_TEXTURE0 + type);
   glBindTexture(GL_TEXTURE_1D, colorband->texid);
-  glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
-  glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
+  glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
+  glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
   glTexImage1D(GL_TEXTURE_1D, 0, GL_RGBA, COLORBAND_WIDTH, 0, GL_RGBA, GL_FLOAT, colorband->tex);
   colorband->tex_set = 1;
   glActiveTexture(GL_TEXTURE0);

Modified: branches/soc-2007-maike/source/blender/src/glsl_colorband_node.c
===================================================================
--- branches/soc-2007-maike/source/blender/src/glsl_colorband_node.c	2007-07-28 16:28:40 UTC (rev 11407)
+++ branches/soc-2007-maike/source/blender/src/glsl_colorband_node.c	2007-07-28 17:30:54 UTC (rev 11408)
@@ -198,6 +198,10 @@
     code = glsl_string(2, GFREE, code, GFREE, glsl_get_func("colorband_blend_mix.gsl"));
   }
 
+  if(blend >= GLSL_CB_BLEND_HUE){
+    code = glsl_string(2, GFREE, glsl_get_func("colorband_hsv_rgb.gsl"), GFREE, code);
+    code = glsl_string(2, GFREE, glsl_get_func("colorband_rgb_hsv.gsl"), GFREE, code);
+  }
   if(!code)
     return "";
 





More information about the Bf-blender-cvs mailing list