Вобщем такой вопрос. Вот у меня получился такой ландшафт.
Вобщем то все ок, но только шейдер гасит освещение, я запихнул дифузное освещение в шейдер с смешиванием, ну результат виден, все какое-то сильно яркое.
Как сделать нормальное освещение?
освещение per pixel считаешь? Засвет может быть если сумма rgba для текстуры смешивания больше 1.0
d.m.k
Ну как ты вобще делал, не стандартным же. Я взял первое попавшиеся освешение:
//
// Blinn vertex shader
//
varying vec3 l;
varying vec3 h;
varying vec3 n;
varying vec3 v;
uniform vec4 lightPos;
uniform vec4 eyePos;
void main(void)
{
vec3 p = vec3 ( gl_ModelViewMatrix * gl_Vertex ); // transformed point to world space
l = normalize ( vec3 ( lightPos ) - p ); // vector to light source
v = normalize ( vec3 ( eyePos ) - p ); // vector to the eye
h = normalize ( l + v );
n = normalize ( gl_NormalMatrix * gl_Normal ); // transformed n
gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
}
//
// Blinn fragment shader
//
varying vec3 l;
varying vec3 h;
varying vec3 v;
varying vec3 n;
void main (void)
{
const vec4 diffColor = vec4 ( 0.8, 0.8, 0.8, 1.0 );
const vec4 specColor = vec4 ( 0.9, 0.9, 0.9, 1.0 );
const float specPower = 50.0;
vec3 n2 = normalize ( n );
vec3 l2 = normalize ( l );
vec3 h2 = normalize ( h );
vec4 diff = diffColor * max ( dot ( n2, l2 ), 0.0 );
vec4 spec = specColor * pow ( max ( dot ( n2, h2 ), 0.0 ), specPower );
gl_FragColor = diff + spec;
}
Тока я написал gl_FragColor = diff + (тута смешивание тесктур). Может само освешение карявое?
почему ты смешивание прибавляешь к diff... надо умножать на него...
Vel I
gl_FragColor = diff * (тута смешивание тесктур)
0r@ngE
опередил )
d.m.k
=)
Vel I
gl_FragColor = vec4( (тута смешивание тесктур).rgb * max ( dot ( n2, l2 ), 0.0 ), 1.0 );
specular вообще убери
Кстати, кто нибудь делал ландшавты не на регулярной сетке?
0r@ngE
Точно, сенк. Теперь все нормально. А ты какое освещение юзаешь?
d.m.k
Эт как?
Vel I
> А ты какое освещение юзаешь?
для ландшафта? dot( n, l ); =)
0r@ngE
Ну мне мое больше нравится, так сильно темно получается.
Вобще я не думал что смешивание такое простое, и что шейдеры это не сложно. Епт, эта тема меня сделала другим человеком =)
Спасибо всем кто помогал!
Vel I
>Эт как?
ну например на сплайнах, или как у nVidia в деме на процедурной геометрии... вот и поинтересовался, может кто еще какие способы знает кроме карты высот и сетки...
таааак ))))) я влезу с парочкой вопросов тема как раз для меня актуальная )
остались такие вопросы
в итоге самое оптимальное решение как я понял предоставил 0r@ngE смешав его с Wo2lf
но остались такие вопросы
есть карта высот
получается каждая "высота" помимо своей высоты несет в себе
1 все текстуры ?
2 альфа каждой текстуры ?
получается в шойдер в атрибутах для каждой вершины мы отправляем текстуры + альфы для этих текстур ? дальше смешиваем соотвесвенно получая нужный цвет
плюсы из этого, заключаются действительно в простом редактировании ,если редактор сбрасывает карту высот, в которой каждая точка несет в себе информацию о текстурах и ее альфы, то конечно можно наворотить всего чего хочешь
непонятна цифра у 0r@ngE - 6, почему максимум 6 ?1 атрибут максимум может нести в себе 4 параметра ( vec4 максимум же ) ,получается либо 4 альфы, либо 8 ( если два атрибута под это отдать ? )
I
У меня так:
весь ландшафт поделен на патчи (читай куски), размер подбирается эмпирически. Каждый кусок имеет список текстур которые внутри него задействованы [1-6].
в вершинных аттрибутах указаны веса этих текстур.
Пример псевдо-c++ кодом
GLuint textures[6]; texcoord7.z = вес 1-й текстуры texcoord7.w= вес 2-й текстуры texcoord8.x= вес 3-й текстуры texcoord8.y= вес 4-й текстуры texcoord8.z= вес 5-й текстуры texcoord8.w= вес 6-й текстуры // шейдер gl_FragColor = texture2D(tex1, uv1) * uv7.z + texture2D( tex2, uv2) * uv7.w + texture2D( tex3, uv3) * uv8.x + texture2D( tex4, uv4) * uv8.y + texture2D( tex5, uv5) * uv8.z + texture2D( tex6, uv6) * uv8.w;
> непонятна цифра у 0r@ngE - 6, почему максимум 6 ?
:) а вот так, как видишь выше, остальное место уже занято :)
fnks все понятно ! просплюсь сделаю ! спасибо !
кстате учитывая, что платформа у меня GLSL ES, а в нем как известно уже все на кастомных атрибутах ( то есть текстурных атрибутов и прочего нету ) то тут можно не ограничиваться вобще )))))
Тема в архиве.