с освещение разобрался - расположение ИС в сцене было по нулям координат
а вот размер блика найти не могу
Code:/*VERTEX_PROGRAM*/
//
// all ligting is done in camera space
//
const int MaxLights = 8;
varying vec2 TexCoord0;
varying vec3 eyeNormal;
varying vec3 viewVec;
varying vec3 lightDir[MaxLights];
uniform float ENGINE_TIME;
// lights
uniform vec3 LightPosition[MaxLights]; // in camera space: premultiplied with ModelView
uniform vec4 LightColor[MaxLights]; // RGBA
uniform float NumLights; // number of active lights
void main()
{
gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
TexCoord0 = vec2(gl_MultiTexCoord0);
eyeNormal = gl_NormalMatrix * gl_Normal;
viewVec = -(gl_ModelViewMatrix * gl_Vertex).xyz;
// if no lights are used setup dummy directional light
lightDir[0] = vec3( 0.408250, 0.408250, 0.8165 );
for (int i = 0; i != int(NumLights); ++i)
{
lightDir[i] = LightPosition[i] - (gl_ModelViewMatrix * gl_Vertex).xyz;
}
}
/*FRAGMENT_PROGRAM*/
//#define DISABLE_LIGHTS
const int MaxLights = 8;
varying vec2 TexCoord0;
varying vec3 eyeNormal;
varying vec3 viewVec;
varying vec3 lightDir[MaxLights];
uniform vec4 LightColor[MaxLights];
uniform float NumLights;
uniform sampler2D Texture0; // Diffuse
vec4 GetDiffMap()
{
vec4 Color = texture2D(Texture0, TexCoord0);
return Color;
}
vec3 GetNormal()
{
vec3 LNormal = normalize( eyeNormal );
return LNormal;
}
vec4 GetAmbient()
{
vec4 Color = vec4(0.2, 0.2, 0.2, 1.0);
return Color;
}
vec4 GetDiffuse(vec3 Normal)
{
vec4 Ambient = GetAmbient();
vec4 DiffMap = GetDiffMap();
// accumulators
vec4 SumDiffVec = vec4( 0.0, 0.0, 0.0, 0.0 );
// accumulate diffuse light from all light sources
for (int i = 0; i != NumLights; ++i )
{
float LdotN = dot( normalize( lightDir[i] ), Normal );
vec4 SumLight = vec4( max( LdotN, 0.0 ) );
SumLight *= LightColor[i];
SumDiffVec += SumLight;
}
DiffMap += vec4 (DiffMap) ;
vec4 Color = DiffMap * (vec4(1.0)-Ambient) * SumDiffVec + Ambient * DiffMap;
return Color;
}
vec4 GetSpecular(vec3 Normal)
{
vec4 DiffMap = GetDiffMap();
float Color = vec4(DiffMap).a;
Color *= float (Color);
vec4 SumSpec = vec4( 0.0, 0.0, 0.0, 0.0 );
// accumulate diffuse light from all light sources
for (int i = 0; i != NumLights; ++i )
{
vec3 R = reflect( -lightDir[i], Normal );
float RdotE = max( dot( normalize(R), normalize(viewVec) ), 0.0 );
SumSpec += RdotE * LightColor[i];
}
return Color * pow( clamp( SumSpec, 0.0, 0.05 ), vec4(32.0) );
}
void main()
{
vec3 EN = GetNormal();
vec4 Diffuse = GetDiffuse( EN );
vec4 Specular = GetSpecular( EN );
vec4 FinalColor = Diffuse + Specular ;
gl_FragColor = FinalColor;
}
/*
* 21/04/2009
Light sources
* 20/04/2009
Uniforms for ambient, diffuse and specular
*/