
- Used to bridge the gap between Blender and OpenGL GLSL with predefined functions.
name:
- Type: string
- your name for the predefined function.
- Type: predefined OpenGL GLSL functions in Blender Game Engine
- [mat4] MODELVIEWMATRIX
- [mat4] MODELVIEWMATRIX_TRANSPOSE
- [mat4] MODELVIEWMATRIX_INVERSE
- [mat4] MODELVIEWMATRIX_INVERSETRANSPOSE
- [mat4] MODELMATRIX
- [mat4] MODELMATRIX_TRANSPOSE
- [mat4] MODELMATRIX_INVERSE
- [mat4] MODELMATRIX_INVERSETRANSPOSE
- [mat4] VIEWMATRIX
- [mat4] VIEWMATRIX_TRANSPOSE
- [mat4] VIEWMATRIX_INVERSE
- [mat4] VIEWMATRIX_INVERSETRANSPOSE
- [vec3] CAM_POS
- [float] CONSTANT_TIMER
- Shaders work with Viewport Shading GLSL and Viewport Shading Multitexture.
- Shaders don't work with Viewport Shading Singletexture.

############################# pass 4 integer values
############## main program
def main():
import bge
# get the current controller
cont = bge.logic.getCurrentController()
# get object that owns this controller
obj = cont.owner
# Get a list of the mesh
meshList = obj.meshes
# Get the first mesh on the object
mesh = meshList[0]
# only one material on mesh
mat = mesh.materials[0]
# Using Blender GLSL Materials or Blender Multitexture Materials?
if hasattr( mat, 'getMaterialIndex') == True:
shader = mat.getShader()
# did it get the shader envelope?
if shader != None:
shader.setSource(VertexProgram,FragmentProgram, True)
# set enum
enum = bge.logic.MODELVIEWMATRIX_INVERSE
# change Blender matrix to OpenGl
shader.setUniformDef('mvi', enum)
####### end of main program
VertexProgram = """
// matrix transform from main part of program
uniform mat4 mvi;
// light vector being passed to fragment program
varying vec3 lightVec;
void main()
{
// Convert light position
lightVec = vec3((mvi * gl_LightSource[0].position).xyz );
// Normalize it
lightVec = normalize(lightVec);
// Required OpenGL glsl code
gl_Position = ftransform();
}
"""
FragmentProgram = """
// From VertexProgram
varying vec3 lightVec;
void main()
{
// color to green
vec3 color = vec3(0.0,1.0,0.0);
// transform with lightVec
color = color * lightVec;
// Use it
gl_FragColor = vec4(color, 1.0);
}
"""
############ Run Program
main()