d13716a917
Currently works only with irrlicht-based renderer because shaders are not ported yet.
50 lines
1.4 KiB
GLSL
50 lines
1.4 KiB
GLSL
// Copyright (C) 2009-2010 Amundis
|
|
// Heavily based on the OpenGL driver implemented by Nikolaus Gebhardt
|
|
// and OpenGL ES driver implemented by Christian Stehno
|
|
// This file is part of the "Irrlicht Engine".
|
|
// For conditions of distribution and use, see copyright notice in Irrlicht.h
|
|
#define MAX_LIGHTS 2
|
|
|
|
precision mediump float;
|
|
|
|
uniform sampler2D texture0;
|
|
uniform sampler2D texture1;
|
|
|
|
//uniform vec4 uLightDiffuse[MAX_LIGHTS];
|
|
uniform float uHeightScale;
|
|
|
|
varying vec4 varTexCoord;
|
|
varying vec3 varLightVector[MAX_LIGHTS];
|
|
varying vec4 varLightColor[MAX_LIGHTS];
|
|
varying vec3 varEyeVector;
|
|
|
|
varying vec4 debug;
|
|
|
|
void main(void)
|
|
{
|
|
// fetch color and normal map
|
|
vec4 normalMap = texture2D(texture1, varTexCoord.xy) * 2.0 - 1.0;
|
|
|
|
// height = height * scale
|
|
normalMap *= uHeightScale;
|
|
|
|
// calculate new texture coord: height * eye + oldTexCoord
|
|
vec2 offset = varEyeVector.xy * normalMap.w + varTexCoord.xy;
|
|
|
|
// fetch new textures
|
|
vec4 colorMap = texture2D(texture0, offset);
|
|
normalMap = normalize(texture2D(texture1, offset) * 2.0 - 1.0);
|
|
|
|
// calculate color of light 0
|
|
vec4 color = clamp(varLightColor[0], 0.0, 1.0) * dot(normalMap.xyz, normalize(varLightVector[0].xyz));
|
|
|
|
// calculate color of light 1
|
|
color += clamp(varLightColor[1], 0.0, 1.0) * dot(normalMap.xyz, normalize(varLightVector[1].xyz));
|
|
|
|
//luminance * base color
|
|
color *= colorMap;
|
|
color.a = varLightColor[0].a;
|
|
|
|
gl_FragColor = color;
|
|
}
|