Hello everyone,
Our team is working on an underwater simulation and today I tried adding new ground geometry but noticed that the colors of the ground were completely different then expected when being rendered using the shader. 
When I debugged and tried setting the gl_FragColor to full red this was the result I got: 
http://i1100.photobucket.com/albums/g41 ... ullred.pngThis was what I expected but now when I tried setting R to 0.5 I got this result: 
http://i1100.photobucket.com/albums/g41 ... alfred.pngI am pretty lost on this one what could possibly influence the colors to be different. I checked the materials and shader over and over.
Here is the scene and material files that are being used. The log file doesn't contain any errors. I expect I messed up the material but I don't see it.
Any help would be welcome!
Code:
AQUARIUM.SCENE.XML
----------------------------------------------------------
<Model name="aquarium" geometry="models/aquarium.geo">
   <Mesh name="aquarium_test" material="models/lambert_pool.material.xml" batchStart="0" batchCount="300" vertRStart="0" vertREnd="101" />
   <Mesh name="polySurface1" material="models/ground.material.xml" tx="0" ty="0" tz="749.845" batchStart="300" batchCount="12288" vertRStart="102" vertREnd="8293" />
</Model>
GROUND.MATERIAL.XML
----------------------------------------------------------
<Material>
   <Shader source="shaders/water.shader" />
   
   <Sampler name="causticMap" map="/textures/caustics/001.png" />
   
   <Uniform name="textureMatrixRow0" a="0.0" b="0.0" c="0.0" d="0.0" />
   <Uniform name="textureMatrixRow1" a="0.0" b="0.0" c="0.0" d="0.0" />
   <Uniform name="textureMatrixRow2" a="0.0" b="0.0" c="0.0" d="0.0" />
   <Uniform name="textureMatrixRow3" a="0.0" b="0.0" c="0.0" d="0.0" />
   <Uniform name="fogColor" a="0.0" b="0.0" c="0.0" d="0.0" />
</Material>
LAMBERT_POOL.MATERIAL.XML
----------------------------------------------------------
<Material>
   <Shader source="shaders/water.shader" />
   
   <Sampler name="causticMap" map="/textures/caustics/001.png" />
   
   <Uniform name="textureMatrixRow0" a="0.0" b="0.0" c="0.0" d="0.0" />
   <Uniform name="textureMatrixRow1" a="0.0" b="0.0" c="0.0" d="0.0" />
   <Uniform name="textureMatrixRow2" a="0.0" b="0.0" c="0.0" d="0.0" />
   <Uniform name="textureMatrixRow3" a="0.0" b="0.0" c="0.0" d="0.0" />
   <Uniform name="fogColor" a="0.0" b="0.0" c="0.0" d="0.0" />
</Material>
And this is the shader that is used to render the geometry:
Code:
// Per pixel fog: http://www.ozone3d.net/tutorials/glsl_fog/index.php
// By Jerome 'JeGX' Guinot - jegx_AT_ozone3d(dot)net 
[[FX]]
// Supported Flags
/* ---------------
   _F01_Skinning
   _F02_NormalMapping
*/
// Samplers
sampler2D albedoMap;
sampler2D causticMap = sampler_state
{
   Address = Wrap;
   Filter = Trilinear; 
   MaxAnisotropy = 1;
};
sampler2D normalMap = sampler_state
{
   Texture = "textures/common/defnorm.tga";
};
samplerCube ambientMap = sampler_state
{
   Address = Clamp;
   Filter = Bilinear;
   MaxAnisotropy = 1;
};
// Uniforms
float4 specParams <
   string desc_a = "a: specular mask";
   string desc_b = "b: specular exponent";
> = {0.1, 16.0, 0, 0};
float4 textureMatrixRow0;
float4 textureMatrixRow1;
float4 textureMatrixRow2;
float4 textureMatrixRow3;
float4 fogColor;
// Contexts
context ATTRIBPASS
{
   VertexShader = compile GLSL VS_GENERAL;
   PixelShader = compile GLSL FS_ATTRIBPASS;
}
context SHADOWMAP
{
   VertexShader = compile GLSL VS_SHADOWMAP;
   PixelShader = compile GLSL FS_SHADOWMAP;
}
context LIGHTING
{
   VertexShader = compile GLSL VS_GENERAL;
   PixelShader = compile GLSL FS_LIGHTING;
   
   ZWriteEnable = false;
   BlendMode = Add;
}
context AMBIENT
{
   VertexShader = compile GLSL VS_GENERAL;
   PixelShader = compile GLSL FS_AMBIENT;
}
[[VS_GENERAL]]
// =================================================================================================
#include "shaders/shaderSettings.shader"
#include "shaders/utilityLib/vertCommon.glsl"
#ifdef _F01_Skinning
   #include "shaders/utilityLib/vertSkinning.glsl"
#endif
uniform mat4      viewProjMat;
uniform vec3      viewerPos;
attribute vec3      vertPos;
attribute vec2      texCoords0;
attribute vec3      normal;
#ifdef _F02_NormalMapping
   attribute vec4   tangent;
#endif
varying vec4      pos, vsPos;
varying vec2      texCoords;
#ifdef _F02_NormalMapping
   varying mat3   tsbMat;
#else
   varying vec3   tsbNormal;
#endif
varying vec4      projCoords;
// texture matrix
uniform vec4      textureMatrixRow0;
uniform vec4      textureMatrixRow1;
uniform vec4      textureMatrixRow2;
uniform vec4      textureMatrixRow3;
void main( void )
{
#ifdef _F01_Skinning
   mat4 skinningMat = calcSkinningMat();
   mat3 skinningMatVec = getSkinningMatVec( skinningMat );
#endif
   
   // Calculate normal
#ifdef _F01_Skinning
   vec3 _normal = normalize( calcWorldVec( skinVec( normal, skinningMatVec ) ) );
#else
   vec3 _normal = normalize( calcWorldVec( normal ) );
#endif
   // Calculate tangent and bitangent
#ifdef _F02_NormalMapping
   #ifdef _F01_Skinning
      vec3 _tangent = normalize( calcWorldVec( skinVec( tangent.xyz, skinningMatVec ) ) );
   #else
      vec3 _tangent = normalize( calcWorldVec( tangent.xyz ) );
   #endif
   
   vec3 _bitangent = cross( _normal, _tangent ) * tangent.w;
   tsbMat = calcTanToWorldMat( _tangent, _bitangent, _normal );
#else
   tsbNormal = _normal;
#endif
   // Calculate world space position
#ifdef _F01_Skinning   
   pos = calcWorldPos( skinPos( vec4( vertPos, 1.0 ), skinningMat ) );
#else
   pos = calcWorldPos( vec4( vertPos, 1.0 ) );
#endif
   vsPos = calcViewPos( pos );
   
   // setup lightview matrix
   mat4 textureMatrix = mat4(0.0);
   textureMatrix[0] = textureMatrixRow0;
   textureMatrix[1] = textureMatrixRow1;
   textureMatrix[2] = textureMatrixRow2;
   textureMatrix[3] = textureMatrixRow3;
   
   // get projected texture coordinates
   projCoords = textureMatrix * pos;
   
   // Calculate texture coordinates and clip space position
   texCoords = texCoords0;
   gl_Position = viewProjMat * pos;
}
[[FS_ATTRIBPASS]]
// =================================================================================================
#include "shaders/utilityLib/fragDeferredWrite.glsl" 
uniform vec3         viewerPos;
uniform vec4         specParams;
uniform sampler2D      albedoMap;
#ifdef _F02_NormalMapping
   uniform sampler2D   normalMap;
#endif
varying vec4         pos;
varying vec2         texCoords;
#ifdef _F02_NormalMapping
   varying mat3      tsbMat;
#else
   varying vec3      tsbNormal;
#endif
void main( void )
{
   vec3 newCoords = vec3( texCoords, 0 );
   // Flip texture vertically to match the GL coordinate system
   newCoords.t *= -1.0;
   vec4 albedo = texture2D( albedoMap, newCoords.st );
   
#ifdef _F02_NormalMapping
   vec3 normalMap = texture2D( normalMap, newCoords.st ).rgb * 2.0 - 1.0;
   vec3 normal = tsbMat * normalMap;
#else
   vec3 normal = tsbNormal;
#endif
   vec3 newPos = pos.xyz;
   
   setMatID( 1.0 );
   setPos( newPos - viewerPos );
   setNormal( normalize( normal ) );
   setAlbedo( albedo.rgb );
   setSpecMask( specParams.x );
}
   
[[VS_SHADOWMAP]]
// =================================================================================================
   
#include "shaders/utilityLib/vertCommon.glsl"
#include "shaders/utilityLib/vertSkinning.glsl"
uniform mat4      viewProjMat;
uniform vec4      lightPos;
attribute vec3      vertPos;
varying vec3      lightVec;
void main( void )
{
#ifdef _F01_Skinning   
   vec4 pos = calcWorldPos( skinPos( vec4( vertPos, 1.0 ) ) );
#else
   vec4 pos = calcWorldPos( vec4( vertPos, 1.0 ) );
#endif
   lightVec = lightPos.xyz - pos.xyz;
   gl_Position = viewProjMat * pos;
}
      
[[FS_SHADOWMAP]]
// =================================================================================================
uniform vec4      lightPos;
uniform float      shadowBias;
varying vec3      lightVec;
void main( void )
{
#ifdef _F05_AlphaTest
   vec4 albedo = texture2D( albedoMap, texCoords * vec2( 1, -1 ) );
   if( albedo.a < 0.01 ) discard;
#endif
   
   float dist = length( lightVec ) / lightPos.w;
   gl_FragDepth = dist + shadowBias;
   
   // Clearly better bias but requires SM 3.0
   //gl_FragDepth = dist + abs( dFdx( dist ) ) + abs( dFdy( dist ) ) + shadowBias;
}
[[FS_LIGHTING]]
// =================================================================================================
#include "shaders/shaderSettings.shader"
#include "shaders/utilityLib/fragLighting.glsl" 
uniform vec4         specParams;
uniform sampler2D      albedoMap;
uniform sampler2D      causticMap;
#ifdef _F02_NormalMapping
   uniform sampler2D   normalMap;
#endif
varying vec4         pos, vsPos;
varying vec2         texCoords;
#ifdef _F02_NormalMapping
   varying mat3      tsbMat;
#else
   varying vec3      tsbNormal;
#endif
varying float         fogFactor;
uniform vec4         fogColor;
varying vec4         projCoords;
void main( void )
{
   vec3 newCoords = vec3( texCoords, 0 );
   // Flip texture vertically to match the GL coordinate system
   newCoords.t *= -1.0;
   vec4 albedo = texture2D( albedoMap, newCoords.st );
   
#ifdef _F02_NormalMapping
   vec3 normalMap = texture2D( normalMap, newCoords.st ).rgb * 2.0 - 1.0;
   vec3 normal = tsbMat * normalMap;
#else
   vec3 normal = tsbNormal;
#endif
   vec3 newPos = pos.xyz;
   
   // calculate phong and add caustic texture to final color
   vec4 causticColor = vec4( 0.0, 0.0, 0.0, 0.0 );
   if ( projCoords.w > 0 )
    {
      causticColor = texture2DProj( causticMap, projCoords );
   }
   vec3 finalColor = calcPhongSpotLight( newPos, normalize( normal ), albedo.rgb + (causticColor*SHADERSETTINGS_CAUSTICS_STRENGTH).rgb, specParams.x, specParams.y, -vsPos.z, 0.0 );
      
   // distance between camera and pixel
   float camVertexDistance = gl_FragCoord.z / gl_FragCoord.w;
   camVertexDistance /= SHADERSETTINGS_FOG_FARCLIPPLANE;
      
   // display z-buffer
//   float z = camVertexDistance / SHADERSETTINGS_FOG_FARCLIPPLANE;
//   gl_FragColor = vec4( z, z, z, 1.0 );
   
   // calculate fog factor
/*   const float LOG2 = 1.442695;
   float fogFactor = exp2( -gl_Fog.density * gl_Fog.density * camVertexDistance * camVertexDistance * LOG2 );
   fogFactor = clamp( fogFactor, 0.0, 1.0 );
   // determine final color
   gl_FragColor.rgb = mix( fogColor.rgb, finalColor.rgb, fogFactor );
   //gl_FragColor.rgb = vec3( fogFactor, fogFactor, fogFactor );
*/
   gl_FragColor.rgb = vec3( 0.5, 0.0, 0.0 );
}
[[FS_AMBIENT]]   
// =================================================================================================
#include "shaders/utilityLib/fragLighting.glsl" 
uniform sampler2D         albedoMap;
uniform samplerCube         ambientMap;
#ifdef _F02_NormalMapping
   uniform sampler2D      normalMap;
#endif
varying vec4            pos;
varying vec2            texCoords;
#ifdef _F02_NormalMapping
   varying mat3         tsbMat;
#else
   varying vec3         tsbNormal;
#endif
void main( void )
{
   vec3 newCoords = vec3( texCoords, 0 );
   // Flip texture vertically to match the GL coordinate system
   newCoords.t *= -1.0;
   vec4 albedo = texture2D( albedoMap, newCoords.st );
   
#ifdef _F02_NormalMapping
   vec3 normalMap = texture2D( normalMap, newCoords.st ).rgb * 2.0 - 1.0;
   vec3 normal = tsbMat * normalMap;
#else
   vec3 normal = tsbNormal;
#endif
   
   //gl_FragColor.rgb = albedo.rgb;// * textureCube( ambientMap, normal ).rgb;
   gl_FragColor.rgb = vec3( 0.0, 0.0, 0.0 );
}