2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




 
 OpenGL
Сообщение19.11.2010, 16:00 
Аватара пользователя
как из файла загрузить картинку для того чтобы использовать ее как текстуру для OpenGL?
в книжке для этого используется функция из библиотеки GLAUX, которую я не смог найти в инете О_о
может есть какая-нибудь WinApi функция? )

 
 
 
 Re: OpenGL
Сообщение19.11.2010, 17:53 
Аватара пользователя
Оказалось, что эта glaux раньше входила в состав Visual Studio, так что пришлось качать Visual Studio 6.0 где она была и брать ее от туда

теперь мой auxDIBImageLoad работает )))

 
 
 
 Re: OpenGL
Сообщение20.11.2010, 14:34 
Аватара пользователя
А теперь такой вопрос )
Вот у меня есть картинка bmp и яхочу чтобы она была текстурой для квадрата. Как сделать так чтобы белый цвет моей текстуры был прозрачен, чтобы он не рисовался?

 
 
 
 Re: OpenGL
Сообщение28.11.2010, 08:23 
Можно попробовать использовать четырехканальные текстуры (с альфа-каналом) и/или поиграться с режимами смешивания...

 
 
 
 Re: OpenGL
Сообщение30.11.2010, 19:16 
Аватара пользователя
Circiter
Спасибо за ответ!

четырех канальные текстуры это те которые RGBA? тут я застрял на том что не понял как добавить альфа-канал картинке, которая у меня в bmp... :oops:
т.е. я бы хотел чтобы например белый цвет был полностью прозрачным, а другие цвета не прозрачными.

ЗЫ пишу в МS VC++

 
 
 
 Re: OpenGL
Сообщение05.12.2010, 22:13 
2ИС
Цитата:
четырех канальные текстуры это те которые RGBA?

Да, они самые.

Цитата:
тут я застрял на том что не понял как добавить альфа-канал картинке, которая у меня в bmp...

Но вы же все равно как-то загружаете данные из bmp-файла. Вот можно создать rgba-текстуру и вручную заполнять альфаканал в зависимости от значений пикселей основного изображения (например, если цвет пискселя картинки равен цвету "синего экрана", то в альфа-канале на этом месте помещаем ноль). Потом нужно будет скормить сформированный 4-мерный (с использованием GL_RGBA вместо GL_RGB) массив-буфер функции glTexImage2D(...).

Для инициализации понадобятся вспомогательные gl-команды вроде этих:
Код:
    glEnable(GL_TEXTURE_2D);
    glEnable(GL_BLEND);
    glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);


N.B., если захочется использовать полупрозрачнось, то скорее всего придется решать проблемы с сортировкой объектов по удаленности от наблюдателя (алгоритм художника). В любом случае, возможно придется шаманить с буфером глубины, т.е. вызывать glDisable(GL_DEPTH_TEST) перед прорисовкой объектов с прозрачностью.

Если тест глубины выключать не хочется, то можно (если возникают проблемы с отрисовкой) попробовать использовать альфа-тест (который, правда, не дружит с "плавной" полупрозрачностью):
Код:
    glEnable(GL_ALPHA_TEST);
    glAlphaFunc(GL_GREATER, 0.1);

Причем, если нужна только бинарная прозрачность (без плавных переходов), то тогда вообще достаточно одного лишь альфа-теста, т.е., в этом случае можно выбросить все вызовы типа glEnable(GL_BLEND) и glBlendFunc(...).

Существует и другой, более древний (и несколько более тормознутый) способ отображение прозрачных текстур, не требующий попиксельного формирования альфа-канала или использования четырехканальных форматов графики (типа tga). Идея состоит в предварительном наложении маски с последующей прорисовкой текстуры (всюду будут применяться обычные rgb-текстуры без альфа-канала). В качестве маски должна использоваться двуцветная черно-белая картинка, все, скажем, белые пиксели которой станут в итоге прозрачными; фоновый цвет оригинальной текстуры пусть будет черным.

После того как включено смешивание и отключен тест глубины можно выбрать конкретный режим смешивание glBlendFunc(GL_DST_COLOR, GL_ZERO) и наложить текстуру-маску на объект. Настоящая же, цветная текстура накладывается на тот же объект сразу после наложения маски, с предварительным включением режима glBlendFunc(GL_ONE, GL_ONE).

Ну примерно так...

-- Пн дек 06, 2010 01:37:03 --

Для экспериментов с прозрачностью могу посоветовать прикольную программульку glsandbox.

 
 
 [ Сообщений: 6 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group