GlBlendFunc и альфа-смешивание

Я хочу знать, как работает glBlendFunc. Например, у меня есть 2 текстуры gl, где альфа находится на tex1, я хочу, чтобы альфа была в моем финальном изображении. Если цвет находится на tex1, я хочу, чтобы цвет был от tex2.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
0
3 781
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

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

Требуется ли для этого использование расширения ARB?

DavidG 09.10.2008 18:13

DavidG: Если в технике используется ARB_texture_env_combine или шейдеры, то это будет. Оба широко поддерживаются.

luke 09.10.2008 19:11

Извините, не могу сделать это простым смешиванием. Мы, например, делали то же самое, используя шейдеры фрагментов.

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

Ответ принят как подходящий

К сожалению, это для openGL ES на iPhone, так что никаких шейдеров, но точка зрения принята. Моя проблема заключалась в очень упрощенной версии вопросов, мне нужно было применить простой цвет (включая альфа) к части определенной текстуры. Как отметил Ли, смешение текстур позволяет альфа-каналу отображаться в буфере кадра. Решение заключалось в том, чтобы настоять на том, чтобы художник сделал «бит действия» текстуры белым, а затем назначил цвет вершинам, которые я визуализировал. Что-то вроде этого.

glTexCoordPointer( 2, GL_FLOAT, 0, sprite->GetTexBuffer() );
glVertexPointer( 3, GL_FLOAT, 0, sprite->GetVertexBuffer() );
glColorPointer( 4, GL_FLOAT, 0, sprite->GetColorBuffer() );
glDrawArrays( GL_TRIANGLES, 0, 6 ); // Draw 2 triangles

Если даже у него есть текстура, наличие цвета означает, что он добавляет к цвету текстуры, поэтому, если это альфа, он остается альфа, а где он белый (как я должен был это сделать), он становится цветом цвета. указатель в точке.

Что означает «бит действия»? Решает ли то, что вы здесь описываете, вашу проблему?

Jim Buck 12.10.2008 23:33

да, это решило мою проблему. "бит действия" - это часть, которую я хочу нарисовать другим цветом. в основном, если мне нужна одна текстура (например, набор шрифтов), где каждому непрозрачному биту нужен собственный цвет, я использовал это.

DavidG 15.10.2008 21:03

Другие вопросы по теме