2014 dxdy logo

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

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




Начать новую тему Ответить на тему
 
 OpenGL
Сообщение19.11.2010, 16:00 
Аватара пользователя


21/04/09
195
как из файла загрузить картинку для того чтобы использовать ее как текстуру для OpenGL?
в книжке для этого используется функция из библиотеки GLAUX, которую я не смог найти в инете О_о
может есть какая-нибудь WinApi функция? )

 Профиль  
                  
 
 Re: OpenGL
Сообщение19.11.2010, 17:53 
Аватара пользователя


21/04/09
195
Оказалось, что эта glaux раньше входила в состав Visual Studio, так что пришлось качать Visual Studio 6.0 где она была и брать ее от туда

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

 Профиль  
                  
 
 Re: OpenGL
Сообщение20.11.2010, 14:34 
Аватара пользователя


21/04/09
195
А теперь такой вопрос )
Вот у меня есть картинка bmp и яхочу чтобы она была текстурой для квадрата. Как сделать так чтобы белый цвет моей текстуры был прозрачен, чтобы он не рисовался?

 Профиль  
                  
 
 Re: OpenGL
Сообщение28.11.2010, 08:23 
Заслуженный участник


26/07/09
1559
Алматы
Можно попробовать использовать четырехканальные текстуры (с альфа-каналом) и/или поиграться с режимами смешивания...

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


21/04/09
195
Circiter
Спасибо за ответ!

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

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

 Профиль  
                  
 
 Re: OpenGL
Сообщение05.12.2010, 22:13 
Заслуженный участник


26/07/09
1559
Алматы
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 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group