Это пнет Z на экране, чтобы создать иллюзию карты высот.
Это на самом деле не меняет геометрию.
[править] Это не полезно для вида сверху вниз. Я бы попробовал добавить какой-нибудь эффект тени на основе нового Z и направления света.
Эта строка: pos.z + = color.x + color.y + color.z; - это то, что толкает Z. Вы можете присвоить шкале положительное или отрицательное число.
/* Vertex Program
* Shifts Z by Textures color
*/
uniform sampler2D color_texture;
uniform float scale;
varying vec4 p_color;
void main()
{
vec2 texcoords = gl_MultiTexCoord0.st;
p_color = texture2D(color_texture,texcoords);
vec4 color = texture2D(color_texture,texcoords);
vec4 pos = gl_Vertex;
pos.z += color.x + color.y + color.z;
pos.z*=scale;
gl_Position = gl_ModelViewProjectionMatrix * pos;
}
А вот ОЧЕНЬ простая программа Fragment.
/* Fragment Program
Copies incoming fragment color without change.
*/
varying vec4 p_color;
void main()
{
gl_FragColor = p_color;
}