| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Мультимедия, OpenGL/DirectX > Наложение текстур в -чернота вместо прозрачности |
| Автор: grecd 12.2.2014, 09:54 | ||||
Загружаю текстуру при помощи ImageMagic++ как показано в этом туторе http://ogldev.atspace.co.uk/www/tutorial16/tutorial16.html
далее рендер сцены, почему то после загрузки текстуры сцена становится черной и при отрисовке "флагов" на фоне другой текстуры там где должно быть прозрачно там чернота
|
| Автор: tzirechnoy 12.2.2014, 15:37 | ||
Вообще, понять что-нибудь по некомпилирующемуся отрывку довольно сложно -- особенно учитывая, как важны в OpenGL всякие глобальные флаги. Но, как минимум:
В текстурах GL_RGB нет никакой прозрачности. |
| Автор: grecd 13.2.2014, 09:31 | ||||
поменял на GL_RGBA все равно чернота вместо прозрачности Может мне проект линуксовый сюда скинуть? |
| Автор: tzirechnoy 13.2.2014, 15:01 | ||
Возможно. Или вырежьте из него минимальный пример, демонстрирующий непонимание. Это вообще будет полезнее -- можэт, выпока будете вырещать сами разберётесь. |
| Автор: grecd 16.2.2014, 16:45 |
| Вот файл с проектом codeblocks. Методика отслеживания глюка -> FIle->Open file - открыть видео файл, появится его первый кадр. Затем нажать флажок и щёлкнуть на картинке. |
| Автор: tzirechnoy 17.2.2014, 09:08 |
| 1) Собирать пока лень, потому не тэстировал. И не понимаю, что такое "сцэна чёрная". Можэт, вечером. 2) Из очевидного: такой вид прозрачности требует, чтобы примитивы выдавались в Z-буфер от далёких к близким. У Вас кажэтся ровно наоборот -- сначала близкий флаг, затем непрозрачная далёкая видеотекстура. Учитывая, что тут практически 2D -- просто попробуйте поменять местами. Если будет минимальное 3D -- то на пяти примитивах проще всего будет отсортировать их вручную. Если с сортровкой совсем сложно -- можно попробовать что-то такое http://www.openglsuperbible.com/2013/08/20/is-order-independent-transparency-really-necessary/ |
| Автор: grecd 17.2.2014, 17:39 |
// white background нерисуется после загрузки текстур текстура VideoTexture рисуется поверх всего тогда непойму почему |
| Автор: tzirechnoy 17.2.2014, 19:21 | ||
А, тут ещё одна ошыбка и одна нестыковка, которых я с первого раза не заметил. (я пока не скомпилировал, потому так, из анализа). Во-первых, Вы пытаетесь всё сделать через двумерные координаты. Ну, в смысле, у Вас у всех примитивов Z-координата -- 0. Это, в общем, можно, но вот DEPTH_TEST при этом можэт быть применять немного муторно и странно в связи с тем, что Z-буфер вроде как рассчитан как раз на наличие вменяемой третьей координаты (глубины). В частности, вопрос о том, как реально расположатся друг относительно друга два прямоугольника в одной плоскости с учётом ошыбок округления при проецыровании -- он, во многих случаях, решаемый, но требует отдельной проработки. Так что если действительно зачем-то потребуется DEPTH_TEST -- то, возможно, надо будет отказаться от двумерности. Или заполнить глубины какими-то правильными значениями не из координат. Можэт, впрочем, для трёх прямоугольников с Idenitity transformation matrix ничего и не потребуется -- но и DEPTH_TEST тогда откровенно лишний, и только привносит тормозов и ошыбок. А ошыбка -- в том, что Вы нигде не вызываете prepare3DViewport. В примерах от wxWindows он вызывается вручную изнутри ::render. Соответственно, glDepthFunc у Вас остаётся GL_LESS, что означает, что из перекрывающихся частей двух примитивов в одной плоскости нарисуется только первый, второй по большэй части провалит DEPTH_TEST (насчёт меньшэй части -- см.про ошыбки округления). Соответственно, Вашу текстуру с альфой никто рисовать и не подумает. |