2012-05-18 09:45:23 +02:00
uniform sampler2D u_edgeTexture2D ;
uniform sampler2D u_cellTexture2D ;
attribute vec2 a_localCoord ;
attribute float a_face ;
attribute float a_colorCell ;
attribute float a_colorPosI ;
attribute float a_colorNegI ;
attribute float a_colorPosJ ;
attribute float a_colorNegJ ;
attribute float a_colorPosK ;
attribute float a_colorNegK ;
varying vec2 v_localCoord ;
varying vec4 v_cellColor ;
varying vec4 v_bottomColor ;
varying vec4 v_rightColor ;
varying vec4 v_topColor ;
varying vec4 v_leftColor ;
// Native visualization lib stuff
uniform mat4 cvfu_modelViewProjectionMatrix ;
uniform mat4 cvfu_modelViewMatrix ;
uniform mat3 cvfu_normalMatrix ;
attribute vec4 cvfa_vertex ;
attribute vec3 cvfa_normal ;
varying vec3 v_ecPosition ;
varying vec3 v_ecNormal ;
// End native vz stuff
2012-06-26 16:10:41 +02:00
#define POS_I 0.0
#define NEG_I 1.0
#define POS_J 2.0
#define NEG_J 3.0
#define POS_K 4.0
#define NEG_K 5.0
2012-05-18 09:45:23 +02:00
//
// 7---------6
// /| /| |k
// / | / | | /j
// 4---------5 | |/
// | 3------|--2 *---i
// | / | /
// |/ |/
// 0---------1
//
// Face layout expected
// POS_I 1, 2, 6, 5
// NEG_I 0, 4, 7, 3
// POS_J 3, 7, 6, 2
// NEG_J 0, 1, 5, 4
// POS_K 4, 5, 6, 7
// NEG_K 0, 3, 2, 1
//
vec4 getColorFromTextureCoord ( float textureCoord , vec4 cellColor )
{
2012-06-26 16:10:41 +02:00
if ( textureCoord < 0.0 )
2012-05-18 09:45:23 +02:00
return cellColor ;
else
return texture2D ( u_edgeTexture2D , vec2 ( textureCoord , 0.5 f ));
// Alternative to ifs
// return (textureCoord < 0)*cellColor + (textureCoord >= 0)*texture2D(u_edgeTexture2D, vec2(textureCoord, 0.5f ));
}
void main ()
{
v_localCoord = a_localCoord ;
2012-06-26 16:10:41 +02:00
if ( a_colorCell < 0.0 )
2012-05-18 09:45:23 +02:00
v_cellColor = vec4 ( 0.75 , 0.75 , 0.75 , 1 ); // Light grayish
2013-04-26 16:46:38 +02:00
else if ( a_colorCell >= 2.0 )
2013-04-30 15:07:38 +02:00
v_cellColor = texture2D ( u_cellTexture2D , vec2 ( a_colorCell - 2.0 f , 0.0 f )); // Opaque, because the y=0 texcoord points to the opaque part of an modified texture
2013-04-26 16:46:38 +02:00
else
v_cellColor = texture2D ( u_cellTexture2D , vec2 ( a_colorCell , 0.5 f )); // Default, transparent if the texture is modified
2012-05-18 09:45:23 +02:00
/*
// Performance test code
v_bottomColor = 0.5*getColorFromTextureCoord(a_colorNegK, v_cellColor)+ getColorFromTextureCoord(a_colorNegI, v_cellColor);
v_rightColor = getColorFromTextureCoord(a_colorPosJ, v_cellColor);
v_topColor = getColorFromTextureCoord(a_colorPosK, v_cellColor);
v_leftColor = 0.5*getColorFromTextureCoord(a_colorNegJ, v_cellColor)+ getColorFromTextureCoord(a_colorPosI, v_cellColor);
*/
/*
// Alternative to ifs
v_bottomColor =
(a_face == POS_I) * getColorFromTextureCoord(a_colorNegK, v_cellColor)
+ (a_face == NEG_I) * getColorFromTextureCoord(a_colorNegJ, v_cellColor)
+ (a_face == POS_J) * getColorFromTextureCoord(a_colorNegI, v_cellColor)
+ (a_face == NEG_J) * getColorFromTextureCoord(a_colorNegK, v_cellColor)
+ (a_face == POS_K) * getColorFromTextureCoord(a_colorNegJ, v_cellColor)
+ (a_face == NEG_K) * getColorFromTextureCoord(a_colorNegI, v_cellColor);
v_rightColor =
(a_face == POS_I) * getColorFromTextureCoord(a_colorPosJ, v_cellColor)
+ (a_face == NEG_I) * getColorFromTextureCoord(a_colorPosK, v_cellColor)
+ (a_face == POS_J) * getColorFromTextureCoord(a_colorPosK, v_cellColor)
+ (a_face == NEG_J) * getColorFromTextureCoord(a_colorPosI, v_cellColor)
+ (a_face == POS_K) * getColorFromTextureCoord(a_colorPosI, v_cellColor)
+ (a_face == NEG_K) * getColorFromTextureCoord(a_colorPosJ, v_cellColor);
v_topColor =
(a_face == POS_I) * getColorFromTextureCoord(a_colorPosK, v_cellColor)
+ (a_face == NEG_I) * getColorFromTextureCoord(a_colorPosJ, v_cellColor)
+ (a_face == POS_J) * getColorFromTextureCoord(a_colorPosI, v_cellColor)
+ (a_face == NEG_J) * getColorFromTextureCoord(a_colorPosK, v_cellColor)
+ (a_face == POS_K) * getColorFromTextureCoord(a_colorPosJ, v_cellColor)
+ (a_face == NEG_K) * getColorFromTextureCoord(a_colorPosI, v_cellColor);
v_leftColor =
(a_face == POS_I) * getColorFromTextureCoord(a_colorNegJ, v_cellColor)
+ (a_face == NEG_I) * getColorFromTextureCoord(a_colorNegK, v_cellColor)
+ (a_face == POS_J) * getColorFromTextureCoord(a_colorNegK, v_cellColor)
+ (a_face == NEG_J) * getColorFromTextureCoord(a_colorNegI, v_cellColor)
+ (a_face == POS_K) * getColorFromTextureCoord(a_colorNegI, v_cellColor)
+ (a_face == NEG_K) * getColorFromTextureCoord(a_colorNegJ, v_cellColor);
*/
///*
if ( a_face == POS_I )
{
v_bottomColor = getColorFromTextureCoord ( a_colorNegK , v_cellColor );
v_rightColor = getColorFromTextureCoord ( a_colorPosJ , v_cellColor );
v_topColor = getColorFromTextureCoord ( a_colorPosK , v_cellColor );
v_leftColor = getColorFromTextureCoord ( a_colorNegJ , v_cellColor );
}
else if ( a_face == NEG_I )
{
v_bottomColor = getColorFromTextureCoord ( a_colorNegJ , v_cellColor );
v_rightColor = getColorFromTextureCoord ( a_colorPosK , v_cellColor );
v_topColor = getColorFromTextureCoord ( a_colorPosJ , v_cellColor );
v_leftColor = getColorFromTextureCoord ( a_colorNegK , v_cellColor );
}
else if ( a_face == POS_J )
{
v_bottomColor = getColorFromTextureCoord ( a_colorNegI , v_cellColor );
v_rightColor = getColorFromTextureCoord ( a_colorPosK , v_cellColor );
v_topColor = getColorFromTextureCoord ( a_colorPosI , v_cellColor );
v_leftColor = getColorFromTextureCoord ( a_colorNegK , v_cellColor );
}
else if ( a_face == NEG_J )
{
v_bottomColor = getColorFromTextureCoord ( a_colorNegK , v_cellColor );
v_rightColor = getColorFromTextureCoord ( a_colorPosI , v_cellColor );
v_topColor = getColorFromTextureCoord ( a_colorPosK , v_cellColor );
v_leftColor = getColorFromTextureCoord ( a_colorNegI , v_cellColor );
}
else if ( a_face == POS_K )
{
v_bottomColor = getColorFromTextureCoord ( a_colorNegJ , v_cellColor );
v_rightColor = getColorFromTextureCoord ( a_colorPosI , v_cellColor );
v_topColor = getColorFromTextureCoord ( a_colorPosJ , v_cellColor );
v_leftColor = getColorFromTextureCoord ( a_colorNegI , v_cellColor );
}
else if ( a_face == NEG_K )
{
v_bottomColor = getColorFromTextureCoord ( a_colorNegI , v_cellColor );
v_rightColor = getColorFromTextureCoord ( a_colorPosJ , v_cellColor );
v_topColor = getColorFromTextureCoord ( a_colorPosI , v_cellColor );
v_leftColor = getColorFromTextureCoord ( a_colorNegJ , v_cellColor );
}
else
{
v_bottomColor = getColorFromTextureCoord ( a_colorCell , v_cellColor );
v_rightColor = getColorFromTextureCoord ( a_colorCell , v_cellColor );
v_topColor = getColorFromTextureCoord ( a_colorCell , v_cellColor );
v_leftColor = getColorFromTextureCoord ( a_colorCell , v_cellColor );
}
//*/
// Transforms vertex position and normal vector to eye space
v_ecPosition = ( cvfu_modelViewMatrix * cvfa_vertex ). xyz ;
v_ecNormal = cvfu_normalMatrix * cvfa_normal ;
gl_Position = cvfu_modelViewProjectionMatrix * cvfa_vertex ;
}