Войти
ПрограммированиеФорумГрафика

Текстурирование ландшафта (смешивание текстур) OpenGL - пост N 36

Страницы: 1 2 3 4 5 Следующая »
#0
13:17, 6 апр 2008

Вобщем хочется что б на одном ландшафте было много разных текстур, и рисовались они хотябы в зависимости от высоты.

Как это можно сделать? На расширениях или щейдером, вобщем ссылки на дельные материалы приветствуются.
Перерыл уже кучу материала, но толком ничего не понял, буду рад любой помощи.

#1
13:43, 6 апр 2008

Как сделано у меня. В шейдер передаются 6 текстур, первые 5 - слои RGB формата, шестая текстура RGBA - маска для смешивания, где каждая компонента отвечает за вес слоя в данном пикселе а если сума R+G+B+A меньше 1 то вес пятого слоя считаетя как 1 - сума весов R+G+B+A

uniform sampler2D tex0d, tex1d, tex2d, tex3d, tex4d, texm;

varying vec2 Texcoord, GlobalTexcoord;

vec4 TexD[5], TexTD, TexM;

//...........

    TexD[0] = texture2D( tex0d, Texcoord );
    TexD[1] = texture2D( tex1d, Texcoord );
    TexD[2] = texture2D( tex2d, Texcoord );
    TexD[3] = texture2D( tex3d, Texcoord );
    TexD[4] = texture2D( tex4d, Texcoord );

    TexM = texture2D( texm, GlobalTexcoord );

    TexTD = TexD[0] * ( 1.0 - ( TexM.x + TexM.y + TexM.z + TexM.w ) ) + 
        TexD[1] * TexM.x + TexD[2] * TexM.y + TexD[3] * TexM.z + TexD[4] * TexM.w;
#2
14:33, 6 апр 2008

один сэмплер для 4-х канальной текстуры смешивния, 4 сэмплера для текстур типа песок/камень/трава/грязь.

#3
17:02, 6 апр 2008

SunnyDay
+1 сэмплер вес которого = 1.0 - ( r + g + b + a )

#4
18:39, 6 апр 2008

А если замутить 3D-текстуру, в которую все текстуры сложены стопкой: №0 := s=0..1, t=0..1, r=0; №1 := s=0..1, t=0..1, r=1/N, №2 := s=0..1, t=0..1, r=2/N, ... №N := s=0..1, t=0..1, r=1, и при рисовании задавать текс. координаты glTexCoord3* (..., ..., height/max_height) ?

#5
19:58, 6 апр 2008

Легче всего (и как оказалось НАМНОГО быстрее) заранее вычислить картинку на CPU - получить готовую текстуру для ландшафта, а потом в в шейдере писать
gl_FragColor = texture2D(texture, ...)

#6
22:12, 6 апр 2008

Sergio666
Это какого размера должна быть текстура, чтоб все детали остались О_о

#7
22:56, 6 апр 2008

У меня 1024x1024. Я предварительно склеиваю 4 (2 на 2) текстуры 512х512 для каждого слоя, а потом склеиваю 5 слоев. И ничего страшного. Намного быстрее и (в моем случае) качественнее! :)

#8
23:12, 6 апр 2008

Hedge
Я так понял после этого всего в TexTD глобальная текстура со всеми смешиваниями?

Как вобще текстурировать каждый квадрат ландшафта?

Вот приблизительно такой мне результат нужен как на скриншоте внизу этой статьи http://www.jenkz.org/articles/terraintexture.htm

#9
23:47, 6 апр 2008

Sergio666
Быстрее, но качество - дерьмовое получается, и весит много..

#10
0:02, 7 апр 2008

Как вобще текстурировать? У меня была идея что есть одна текстура со всеми типами поверхности, а на ландшафте в зависимости от
типа меняем текстурные координаты и какнить границы сглажуем.

А как сделать по умному?

#11
0:16, 7 апр 2008

Вот примерчик, может поможет, по-моему очень круто!!!
http://www.dhpoware.com/demos/glslTerrainTexturing.html

#12
0:16, 7 апр 2008

Hedge
получается у тебя по одной текстуре разного вида поверхности и много текстур "для смешивания" чтобы покрыть весь ландшавт?

Если я правильно понял, то текстура смешивания та же RGB, тогда в чем выигрыш по сравнению с кучей обычных текстур?... Я тоже сейчас начал внедрять ландшавты в движок и собираю подобного рода информацию... так что узнать про различные подходы к этому делу будет интересно!

#13
0:17, 7 апр 2008

SunnyDay
>Sergio666
>Быстрее, но качество - дерьмовое получается, и весит много..
Смотря как делать. Если руки оттуда растут - то хорошее качество :)
А насчет "весит много" - ты прав. Но ничего не поделаешь...

#14
0:21, 7 апр 2008

Vel I
Интересная статья, а что тебе мешает сделать так как там описано? вроде как все доходчиво!

Sergio666
Ты используешь "регулярную сетку" для ландшавта?

Страницы: 1 2 3 4 5 Следующая »
ПрограммированиеФорумГрафика

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