Steps3D написал(а):Это просто способ вызвать фрагментный шейдер, отвечающий за расчет освещения, для каждого пиксела
Погоди ка, т.е. это поверхность, которая всегда будет повёрнута лицом к зрителю? А не лучше ли тогда выводить сразу в буфер кадра?
А это вообще баян:
Ниже приводятся вершинный и фрагментный шейдеры.
//
// Deferred Shading pass 1
//
varying vec3 pos;
varying vec3 n;
varying vec3 t;
varying vec3 b;
uniform sampler2D diffMap;
uniform sampler2D bumpMap;
void main (void)
{
vec3 nn = 2.0*texture2D ( bumpMap, gl_TexCoord [0].xy ).xyz - vec3 ( 1.0 );
gl_FragData [0] = vec4 ( pos.z );
gl_FragData [1] = vec4 ( normalize ( nn.x * t + nn.y * b + nn.z * n ), 1.0 );
gl_FragData [2] = texture2D ( diffMap, gl_TexCoord [0].xy );
}
//
// Deferred Shading pass 2
//
#extension GL_ARB_texture_rectangle: enable
varying vec3 pos;
uniform vec3 lightPos;
uniform sampler2DRect posMap;
uniform sampler2DRect normalMap;
uniform sampler2DRect colorMap;
void main (void)
{
float z = texture2DRect ( posMap, gl_FragCoord.xy ).r;
vec3 n = texture2DRect ( normalMap, gl_FragCoord.xy ).xyz;
vec3 c = texture2DRect ( colorMap, gl_FragCoord.xy ).xyz;
vec3 pp = pos * z / pos.z;
vec3 l = normalize ( lightPos - pp );
vec3 v = normalize ( -pp );
vec3 h = normalize ( l + v );
float diff = max ( 0.2, dot ( l, n ) );
float spec = pow ( max ( 0.0, dot ( h, n ) ), 40.0 );
gl_FragColor = vec4 ( diff * c + vec3 ( spec ), 1.0 );
Каким боком здесь оказались текст вершинного шейдера первого прохода и фрагментного шейдера второго прохода!? Может первоначально было запланировано поместить текст вершинного шейдера 1-ого и 2-ого прохода и фрагментного шейдера 1-ого и 2-ого прохода ?
Отредактировано DungeonLords (2009-05-14 21:25:42)