Кто рализовал попиксельное освещение???
И сколько вам времени и сил панадабилась на это.
ЗЫ: ну уж если нижалка, то сырцами паделитись...
>Кто рализовал попиксельное освещение???
я например.....
>И сколько вам времени и сил панадабилась на это.
смотря где и какое
>ЗЫ: ну уж если нижалка, то сырцами паделитись...
сорци шейдеров или системы?8/
[kis-kis]
Блин, скинь скрин.
И если не трудно, то сырцы системы и шейдеров дай, я мот статейку напишу сюда по пиксельное освещение.
кидай на
6667791
скрины отправил на мыло,а вот сорцы системы... я никогда не был фанатом опен-сорса;),да и много там очень,ты лучше скажи что тебя конкретно интересует,сорци шейдеров дать могу,но отять-же каких? что именно ты хочешь сделать?
[kis-kis]
Проста: вот сцена, на ней куб и стена (плоскость в 2-а фэйса), камера и фонарь. И мне нада шейдер просчета попиксельного освещения (чтоб эта стена из 2-х фейсов выглядела красивро-освещенной). А больша ненада ничё.
ну так а в чем тут-то проблема, берешь и делаешь этот шейдр,на форуме об этом уже раз 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; }
[kis-kis]
Если не лень, мошь кус сурс-кода реализации для D3D кидануть (ну тама константы кие нада...)
6667791
А почему бы тебе не сходить на www.ultimategameprogramming.com и там не скачать несколько соурсов попиксельного освещения? Описано в исходниках все грамотно и обезъяна поймет :)
Скачать из раздела Tutorials->DirectX->седьмая страница
6667791
немогу, ибо с OGL работаю=))
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. а значит и освещение сетки не изменится. я правильно рассуждаю?
Juster~
Хуже, gl_Vertex - это object space, а gl_LightSource[0].position - world space (или camera space? не знаю, не пишу на GLSL :)). Так что код некорректен.
будьте внимательны.
к сожалению, у меня не получилось написать код glsl шейдера, который бы учитывал трансформации modelview (разделяя трансформацию объекта и камеры).
в многочисленных демках объект сам по себе не имеет трансформации (суть не перемещается и не вращается)...
Juster~
Пример для статики, если это как-то задевает твои чувства - домнож на gl_ModelViewMatrix/gl_NormalMatrix соответственно.=))
Zeux
Интерестная теория=)
[dob]
При чем тут теория? Хочешь сказать, что gl_Vertex - это не object space? Или gl_LightSource[0].position автоматически домножается на modelview_inverse?
Zeux
Теория тут при том, что все зависит от того как ты этот gl_LightSource[0].position проставил, если тоже в object space , то домножать уже не надо.
Ну а если в мировых,то конечно надо домножить.
PS лично я предпочитаю 1 вариант
Тема в архиве.