d.m.k
Мне надо OpenGL
тебе нужен конкретный пример с кодом вызовов функций GL или сам шейдер?... Если только шейдер, то приведенный HLSL код достаточно просто перевести на GLSL...
d.m.k
А выигрышь вот в чем. Мой ландшафта это 13*13 квадратов с регулярной сеткой от 48*48 квадов, каждый такой квадрат имеет свою текстуру смешивания (маску) и 5 цветных текстур(трава, земля, камень и тд) причем отдельные текстуры могут повторятся. На квадрат я накладываю текстуры с повторение 48*48 разрешением 512*512, а маска 32 * 32.
Считаем:
13 * 13 * 32 * 32 * 4 = 692224 (байт занимают маски)
в среднем на вот такой вот шмат 13 * 13 квадратов уходит 25 уникальных текстур
512 * 512 * 3 * 25 = 19660800 (байт цветные текстуры)
итого ~21 мега байт
Если это всё сделать одной большой текстурой выйдет
512 * 512 * 3 * 48 * 48 * 13 * 13 = 306217746432 тоесть около 307 гига байт %)))
и маска получается меньшего разрешения, это не сильно сказывается на результате, можешь скрин показать? =)
А с тера байтами то я перепрыгнул случайно исправляю :)
Вобщем кажется я понял в чем вобще принцип. Вот такой вопрос:
Как мне смешать 2 текстуры, так что б в зависимости от альфа текстуры тускнели участки на текстуре травы? Ну надеюсь доступно написано.
Хотелось бы увидеть это на расширениях.
Hedge
не плохо ) только на плоскости не очень эффектно )
Vel I
ты вообще работал с шейдерами? что бы хоть знать от чего "плясать"
чтобы мешать текстуры по альфе достаточно GL_ARB_multitexture, чтобы мешать по комбинированной маске нужен шейдер! В GLSL есть стандартная функция mix вроде как...
Hedge
мне только вот это не понятно:
>а если сума R+G+B+A меньше 1 то вес пятого слоя считаетя как 1 - сума весов R+G+B+A
насколько мне известно каждый из r, g, b или a может быть 1.0, т.е. в сумме дадут 4.0, получается ты должен контроллировать чтобы маски со значениями близкими к 1.0 не накладывались (т.е. нельзя все четыре тектсуры "замесить" сразу)
так?
Можно и все четыре, и любые три, и две и одну!
вот примерная табличка RGBA и результатов
0.00 0.00 0.00 0.00 = Texture0
1.00 0.00 0.00 0.00 = Texture1
0.00 1.00 0.00 0.00 = Texture2
0.00 0.00 1.00 0.00 = Texture3
0.00 0.00 0.00 1.00 = Texture4
0.50 0.00 0.00 0.00 = ( Texture0 + Texture1 ) / 2.0
0.00 0.50 0.00 0.00 = ( Texture0 + Texture2 ) / 2.0
0.00 0.00 0.50 0.00 = ( Texture0 + Texture3 ) / 2.0
0.00 0.00 0.00 0.50 = ( Texture0 + Texture4 ) / 2.0
0.50 0.00 0.00 0.00 = ( Texture1 + Texture0 ) / 2.0
0.50 0.50 0.00 0.00 = ( Texture1 + Texture2 ) / 2.0
0.50 0.00 0.50 0.00 = ( Texture1 + Texture3 ) / 2.0
0.50 0.00 0.00 0.50 = ( Texture1 + Texture4 ) / 2.0
0.33 0.33 0.00 0.00 = ( Texture0 + Texture1 + Texture2 ) / 3.0
0.33 0.00 0.33 0.00 = ( Texture0 + Texture1 + Texture3 ) / 3.0
0.33 0.00 0.00 0.33 = ( Texture0 + Texture1 + Texture4 ) / 3.0
0.33 0.33 0.03 0.00 = ( Texture0 + Texture1 + Texture2 ) / 3.0
0.33 0.33 0.33 0.00 = ( Texture1 + Texture2 + Texture3 ) / 3.0
0.33 0.33 0.00 0.33 = ( Texture1 + Texture2 + Texture4 ) / 3.0
0.25 0.25 0.25 0.25 = ( Texture1 + Texture2 + Texture3 + Texture4 ) / 4.0
0.00 0.25 0.25 0.25 = ( Texture0 + Texture2 + Texture3 + Texture4 ) / 4.0
0.20 0.20 0.20 0.20 = ( Texture0 + Texture1 + Texture2 + Texture3 + Texture4 ) / 5.0
Кстати на первом скрине буквы H, e, d, g, e это 5 разных текстур,
а их "фон" это все пять смешаны тоесть TexM == vec4( 0.2, 0.2, 0.2, 0.2 );
Ах да чуть не забыл, сума компонент маски R+G+B+A <= 1 иначе текстуры будут не смешиваться а накладыватся и будет "засвет"
А насчет плоскости, скоро (уже очень скоро) доделаю редактор, можно будет глянуть "в живую" думаю будет ефектно :)
d.m.k
Как загружать в OpenGL знаю. Я ж и хочу узнать как это делается.
Hedge
Можешь дать ссылки на инфу по которой ты делал шейдер?
Vel I
http://www.gamedev.ru/code/forum/?id=73356&page=2
пост №21
0r@ngE
Wo2lf там отжог, буду пробовать. У тебя вобще получилось по такому принципу сделать?
Vel I
да, немного по своему, но принцып тотже, у мя за проход максимум 6 слоев мешается,
вопщем Wo2lf Respect!
0r@ngE
Тогда к тебе вопрос, я чота непонял, получается для каждого слоя нада рисовать ландшафт заново чтоли?
Тема в архиве.