I have faced this quadrant light diference (http://www.youtube.com/watch?v=PtczGOO5Oyg) during the use of this python script :
import GameLogic as g
objlist = g.getCurrentScene().getObjectList()
g.setLogicTicRate(60.0)
-------------------------------------
ShaderObjects = [ objlist[‘OBNameOfobjecHere’] ]
MaterialIndexList = [0,1]
GlobalAmbient = [0.39,0.35,0.32,1]
AmbF = 0.5
-------------------------------------
VertexShader = “”"
uniform mat4 mvi;
vec4 Tangent;
varying vec4 vcol;
varying vec3 lvec,vvec;
vec3 TBN(in vec3 by)
{
vec3 tangent = (Tangent.xyz);
vec3 binormal = cross(gl_Normal, Tangent.xyz)*Tangent.w;
vec3 normal = gl_Normal;
vec3 tvec;
tvec.x = dot(tangent, by);
tvec.y = dot(binormal, by);
tvec.z = dot(normal, by);
return tvec;
}
void main() {
gl_Position = ftransform();
// texcoord now (vec4())
Tangent = gl_MultiTexCoord1;
vec4 light0 = (mvi*gl_LightSource[0].position)-gl_Vertex;
vec4 view = mvi[3]-gl_Vertex;
lvec = TBN(light0.xyz);
vvec = TBN(view.xyz);
gl_TexCoord[0] = gl_MultiTexCoord0;
vcol =gl_Color;
}
“”"
FragmentShader = “”"
varying vec4 vcol;
varying vec3 lvec,vvec,hvec;
uniform sampler2D color;
uniform sampler2D bump;
void main() {
vec4 diffuse_color = vcol*gl_LightSource[0].diffuse;
vec4 specular_color = gl_FrontMaterial.specular;
vec4 colormap = texture2D(color, gl_TexCoord[0].st);
vec3 lv = normalize(lvec);
vec3 vv = normalize(vvec);
vec3 nv = normalize(2.0*texture2D(bump, gl_TexCoord[0].st).xyz-1.0);
float diff = max(dot(lv, nv), 0.0);
float spec = pow(max(dot(reflect(-vv, nv), lv),0.0), gl_FrontMaterial.shininess);
vec4 diff_pass = colormap*(diffdiffuse_color);
vec4 spec_pass = specspecular_color;
gl_FragColor = vec4(0.1,0.1,0.1,1.0)+diff_pass+spec_pass;
}
“”"
def MainLoop ():
for each object
for obj in ShaderObjects:
mesh_index = 0
mesh = obj.getMesh(mesh_index)
while mesh != None:
for mat in mesh.materials:
regular TexFace materials do NOT have this function
if not hasattr(mat, “getMaterialIndex”):
return
mat_index = mat.getMaterialIndex()
find an index
found = 0
for i in range(len(MaterialIndexList)):
if mat_index == MaterialIndexList[i]:
found=1
break
if not found: continue
shader = mat.getShader()
if shader != None:
if not shader.isValid():
shader.setSource(VertexShader, FragmentShader,1)
shader.setAttrib(g.SHD_TANGENT)
shader.setUniformDef(‘mvi’, g.MODELVIEWMATRIX_INVERSE)
shader.setSampler(‘color’, 0)
shader.setSampler(‘bump’, 1)
mesh_index += 1
mesh = obj.getMesh(mesh_index)
I guess it is related to new UV maping tools (unwrap) and GLSL integration.