LINUX.ORG.RU

OpenGL, полупрозрачность


0

1

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

★★★★★

Последнее исправление: cvs-255 (всего исправлений: 1)

по простому... Ну можно копировать в буфер аккамулятор с каждый пиксель, умножая его на 0.5, затем сдвинуть картинку и добавить в аккамулятор, также с коэф. 0.5. Затем из буфера-аккамулятора скинуть в буфер кадра

sol_linux ★★
()
Ответ на: комментарий от sol_linux

Как-то криво написал.
Пусть A - буфер аккамулятор, F - буфер кадра. Red() - берет красный канал, Blue() - берет синий канал.
A = 0.5*Blue(F);
<смешаем камеру>
A += 0.5*Red(F);
F = A;

sol_linux ★★
()

Не надо никаких 0.5. Это не усереднение, а чистое сложение.

anonymous
()

В итоге сделал через

glEnable(GL_BLEND);

glBlendFunc(GL_SRC_ALPHA,GL_SRC_ALPHA);

Но получилось очень странно: когда красный перед синим, то пересечение почти красное, когда наоборот, то почти нормально.

Хотя цвет имеет 0.5 в четвертой компоненте

cvs-255 ★★★★★
() автор топика
Ответ на: комментарий от cvs-255

Рисуете в текстуру через FBO для левого и правого глаз. Потом очищаете экран, делаете identity и рисуете просто квадрат на весь экран. В квадрату применяете шейдер в котором смешиваете две полученые текстуры нужным способом.

P.S. Для большинства очков нужен красный и бирюзовый, а не синий

vertexua ★★★★★
()
Ответ на: комментарий от vertexua

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

vertexua ★★★★★
()
Ответ на: комментарий от vertexua

Есть вообще примеры использования fragment шейдеров? А то в интернете ничего кроме сования в цвет фиксированного значения нету.

cvs-255 ★★★★★
() автор топика
Ответ на: комментарий от buddhist

На копролитических девайсах не работает. Но это не повод писать под Windows 95. Намного лучше чем тормозные костыли, которые были до этого

vertexua ★★★★★
()
Ответ на: комментарий от vertexua

На многих встроенных видюшках, к примеру, не работает.

buddhist ★★★★★
()

Какие вам нафиг ФБО и шейдеры, если азов ОпенЖЛ не знаете :-) Всё проще.

(пишу с ходу, передаю только идею, да и вообще сейчас температурю)

отключаешь блендинг - чтоб не вызывать очистку буфера перед прорисовкой - экономим филлрейт 
glDisable( GL_BLEND )

устанавливаешь маску для красного цвета 
glColorMask( GL_TRUE , GL_FALSE , GL_FALSE , GL_FALSE )

...
рисуешь сцену с первого глаза

включаешь блендинг - добавочный делаем 
glEnable( GL_BLEND ) 
glBlendEquation( GL_FUNC_ADD ) 
glBlendFunc( GL_ONE, GL_ONE )

устанавливаешь маску для голубого цвета 
glColorMask( GL_FALSE , GL_TRUE , GL_TRUE , GL_FALSE )

... 
рисуешь сцену со второго глаза

rip86oz
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.