ШейдерыФорум

Кто рализовал попиксельное освещение???

#0
22:52, 14 ноя 2005

Кто рализовал попиксельное освещение???
И сколько вам времени и сил панадабилась на это.

ЗЫ: ну уж если нижалка, то сырцами паделитись...

#1
1:48, 15 ноя 2005

>Кто рализовал попиксельное освещение???
я например.....

>И сколько вам времени и сил панадабилась на это.
смотря где и какое

>ЗЫ: ну уж если нижалка, то сырцами паделитись...
сорци шейдеров или системы?8/

#2
11:11, 15 ноя 2005

[kis-kis]
Блин, скинь скрин.
И если не трудно, то сырцы системы и шейдеров дай, я мот статейку напишу сюда по пиксельное освещение.
кидай на

#3
12:54, 15 ноя 2005

6667791
скрины отправил на мыло,а вот сорцы системы... я никогда не был фанатом опен-сорса;),да и много там очень,ты лучше скажи что тебя конкретно интересует,сорци шейдеров дать могу,но отять-же каких? что именно ты хочешь сделать?

#4
16:03, 15 ноя 2005

[kis-kis]
Проста: вот сцена, на ней куб и стена (плоскость в 2-а фэйса), камера и фонарь. И мне нада шейдер просчета попиксельного освещения (чтоб эта стена из 2-х фейсов выглядела красивро-освещенной). А больша ненада ничё.

#5
17:14, 15 ноя 2005

ну так а в чем тут-то проблема, берешь и делаешь этот шейдр,на форуме об этом уже раз 100 говорили,я уже замучился каждому код приводить, вот недавно некто dimidrol все о том-же спрашивал... странные вы люди,поиском пользоваться наверно религия заприщает...=)
HLSL

struct VpIn
{
    float4 p          : position;
    float2 t0         : texcoord0;
    float2 t1         : texcoord1;
    float3 n          : normal;
};
struct VpOut
{
    float4 p    : position;
    float2 t0   : texcoord0;
    float4 t1   : texcoord1;
    float4 t2   : texcoord2;
};

VpOut VS_main(VpIn i)
{
    VpOut o;
    o.p         = mul(i.p,mWVP);
    o.t0        = i.t0;
    o.t1  = i.p - lightPos;
    o.t2  = 1.0;
    o.t2.xyz  = i.n.xyz;
 return o;
}
float4 PS_main(VpOut i):color0
{
    float4 map = tex2D(tex0,i.t0);

  float4 t1 = normalize(i.t1);
  float4 t2 = normalize(i.t2);
  float  L  = dot(t1,t2);

    return map*L;
}

то-же самое на GLSL

///// vp
void main( void )
{
    gl_Position       = gl_ModelViewProjectionMatrix * gl_Vertex;
    gl_TexCoord[0]    = gl_MultiTexCoord0;
    gl_TexCoord[1]    = gl_Vertex - gl_LightSource[0].position;
    gl_TexCoord[2].xyz=  gl_Normal;
}

///// fp
uniform sampler2D baseMap;
void main( void )
{
    vec4 map = texture2D( baseMap, gl_TexCoord[0].xy );
    vec4 c0  = normalize(gl_TexCoord[1]);
    vec4 c1  = normalize(gl_TexCoord[2]);
    float L  = dot(c0,c1);
    gl_FragColor = map*L;
}
#6
21:15, 15 ноя 2005

[kis-kis]
Если не лень, мошь кус сурс-кода реализации для D3D кидануть (ну тама константы кие нада...)

#7
23:38, 15 ноя 2005

6667791
А почему бы тебе не сходить на www.ultimategameprogramming.com и там не скачать несколько соурсов попиксельного освещения? Описано в исходниках все грамотно и обезъяна поймет :)
Скачать из раздела Tutorials->DirectX->седьмая страница

#8
0:40, 16 ноя 2005

6667791
немогу, ибо с OGL работаю=))

#9
11:10, 19 ноя 2005

2kis-kis:
по приведенной тобой программе на Glsl у меня вопрос:
    gl_TexCoord[1]    = gl_Vertex - gl_LightSource[0].position;
    gl_TexCoord[2].xyz=  gl_Normal;
здесь пишется нормаль в object space и вектор к источнику света (тоже object space), но ведь здесь не учитываются
транформации объекта. если, например, установить трансформацию поворота, то gl_Vertex и gl_Normal не изменятся, тк
они задают параметры в object space. а значит и освещение сетки не изменится. я правильно рассуждаю?

#10
22:39, 24 ноя 2005

Juster~
Хуже, gl_Vertex - это object space, а gl_LightSource[0].position - world space (или camera space? не знаю, не пишу на GLSL :)). Так что код некорректен.

#11
18:17, 8 дек 2005

будьте внимательны.
к сожалению, у меня не получилось написать код glsl шейдера, который бы учитывал трансформации modelview  (разделяя трансформацию объекта и камеры).
в многочисленных демках объект сам по себе не имеет трансформации (суть не перемещается и не вращается)...

#12
22:08, 12 дек 2005

Juster~
Пример для статики, если это как-то задевает твои чувства  - домнож на gl_ModelViewMatrix/gl_NormalMatrix соответственно.=))

Zeux
Интерестная теория=)

#13
11:44, 15 дек 2005

[dob]
При чем тут теория? Хочешь сказать, что gl_Vertex - это не object space? Или gl_LightSource[0].position автоматически домножается на modelview_inverse?

#14
0:26, 18 дек 2005

Zeux
Теория тут при том, что  все зависит от того как ты этот gl_LightSource[0].position проставил, если  тоже в object space , то домножать уже не надо.
Ну а если в мировых,то конечно надо домножить.

PS лично я предпочитаю 1 вариант

ШейдерыФорум

Тема в архиве.