Visual Basic - мастерская разработчика
Библиотеки

DirectX

Обзоры
DirectDraw
Direct3D
DirectX Audio
DirectPlay
DirectInput
Fido Topics
SourceCode
Tools&Libs

OpenGL

Статьи и учебники
Fido Topics
SourceCode
Tools&Libs

Архив по Glide

Движки

Обзоры
Учебники
SourceCode
Downloads

Создание игр

Ваши игры

Обзорные статьи
Учебники
Fido Topics
SourceCode
Download

Stuff

Программер-Чат

Псевдо-FTP
Disclaimer
Оффтопик

 

Смешивание при мультитекстурировании

Fido Themes (ru.opengl)

От: Euclid Nikiforov <euclid@dicomp.ru>
Тема: Смешивание при мульти текстурировании
Дата: 13 марта 2001 г. 15:40

Привет.
Есть необходимость смешивать две тектуры по формуле T0 * A + T1 * (1 - A) с переменным коэф A Как это сделать при мультитекстурировании? Может через GL_EXT_texure_env_combine?

ПС: Вообще хорошо бы поиметь примеры\доки работы с последним

С уважением
Никифоров Евклид


От: Alexey Yakovenko <waker@mdart.com>
Тема: Re: Смешивание при мульти текстурировании
Дата: 13 марта 2001 г. 17:34


"Euclid Nikiforov" <euclid@dicomp.ru> wrote in message
news:98l4ct$13jm$1@gavrilo.mtu.ru...
> Привет.
> Есть необходимость смешивать две тектуры по формуле
> T0 * A + T1 * (1 - A) с переменным коэф A
> Как это сделать при мульти текстурировании?
> Может через GL_EXT_texure_env_combine?

вот за это я не люблю gl. в dx это делается через blendcurrentalpha:

stage0:
colorarg1 texture
colorop selectarg1

stage1:
colorarg1 current
colorarg2 texture
colorop blendcurrentalpha


а в gl, наверное, только через combine... можно поюзать INTERPOLATE_EXT, более подробно подсказать не могу, т.к. сам не юзал, только в доке (nvOpenGLspecs.pdf) формулу глянул:

INTERPOLATE_EXT Arg0 * (Arg2) + Arg1 * (1-Arg2)


> ПС: Вообще хорошо бы поиметь примеры\доки работы с последним

www.nvidia.com

От: Alexey Skoufyin <skuf@cps.tver.ru>
Тема: На: Смешивание при мульти текстурировании
Дата: 14 марта 2001 г. 10:36

Привет, Euclid Nikiforov!

EN> Есть необходимость смешивать две тектуры по формуле
EN> T0 * A + T1 * (1 - A) с переменным коэф A
EN> Как это сделать при мульти текстурировании?
EN> Может через GL_EXT_texure_env_combine?

Вот тебе кусочек кода, правда по памяти:

--- begin code ---

// смешение двух текстур по формуле Arg0*Arg2 + Arg1*(1-Arg2)
// текстуры установлены в TEXTURE0_ARB и TEXTURE1_ARB, включены, разрешены
// и для них задан TexGen или наборы UV-координат
// Текстура 0 обязана иметь альфа-канал, у текстуры 1 он игнорируется

// Включаем режим INTERPOLATE_EXT для текстур
glTexEnvi(GL_TEXTURE_ENV,GL_TEXTURE_ENV_MODE,GL_COMBINE_EXT);
glTexEnvi(GL_TEXTURE_ENV,GL_COMBINE_RGB_EXT,GL_INTERPOLATE_EXT);

// Альфа не интерполируется, в результат записывается предыдущее значение
glTexEnvi(GL_TEXTURE_ENV,GL_COMBINE_ALPHA_EXT,GL_REPLACE_EXT);

// Задаём Arg0 == цвет от TEXTURE0_ARB, альфа от предыдущей стадии
glTexEnvi(GL_TEXTURE_ENV,GL_SOURCE0_RGB_EXT,GL_TEXTURE0_ARB);
glTexEnvi(GL_TEXTURE_ENV,GL_OPERAND0_EXT,GL_SRC_COLOR);

// Источник альфы только для Arg0, т.к. REPLACE берёт только Arg0
glTexEnvi(GL_TEXTURE_ENV,GL_SOURCE0_ALPHA_EXT,GL_PREVIOUS_EXT); // или
GL_PRIMARY_COLOR_EXT

// Задаём Arg1 == цвет от TEXTURE1_ARB, альфа нас не волнует
glTexEnvi(GL_TEXTURE_ENV,GL_SOURCE1_RGB_EXT,GL_TEXTURE1_ARB);
glTexEnvi(GL_TEXTURE_ENV,GL_OPERAND1_EXT,GL_SRC_COLOR);

// Задаём Arg2 == альфа от TEXURE0_ARB, (Arg2 всегда ограничен только альфой)
glTexEnvi(GL_TEXTURE_ENV,GL_SOURCE2_RGB_EXT,GL_TEXTURE0_ARB);
glTexEnvi(GL_TEXTURE_ENV,GL_OPERAND2_EXT,GL_SRC_ALPHA);

--- end code ---

Всё, должно работать.

Вроде бы так, не проверял, не компилировал, так что ошибки сами исправляйте ;))

 


Проект
Создание Народного Учебника по OpenGL

Участвовать!
Поиск
Найдите статью или файл:


Рассылка
Новости сайта
La Vision в вашем почтовом ящике








Программирование на С++ Delphi и Паскаль
Центр демо-искусства в России