Модераторы: Rickert, Alexeis, BorisVorontsov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Альфа режимы обьясните чайнику. 
:(
    Опции темы
waran
Дата 4.11.2009, 23:06 (ссылка) |  (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 4.11.2009

Репутация: нет
Всего: нет



Пишу прогу на gl4java,  почти полностью дублирует
сишевское opengl поэтому пишу сюда.
Какая то непонятка у меня с этими всякими "альфа режимами"
Обьявляю его так :
 gl.glEnable(GL_ALPHA_TEST); 
       gl.glEnable(GL_BLEND);     // Turn blending On
     gl.glBlendFunc(GL_ONE_MINUS_DST_COLOR, GL_ONE_MINUS_CONSTANT_COLOR);     // (Type of blending) Set the blending function for translucency 
   
потом рисую куб с цветами 
gl.glColor4d(cx,cx,cx,0.1);
gl.glBegin(GL_QUADS);...gl.glEnd();   
получаются такие красивые полупрозрачные грани.

внутри куба находится другой обьект,рисованый тоже 
квадами цветом
gl.glColor4d(0.3,0.4,1.0,1);

Че то получается так, что "обьект" в кубе никогда не виден
(или выбирается режим что вся картинка черная)
А когда куб не рисую, "обьект" виден нормально 
Ну если не считать что некоторые нормали повернуты не так,
но это не важно мне просто надо понять сам прикол 
почему его тупо не видно внутри куба
 

PM MAIL   Вверх
EgoBrain
Дата 5.11.2009, 12:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 537
Регистрация: 23.3.2008
Где: Комната

Репутация: нет
Всего: 2



х3 как в OpenGL (наверное так же как и в DirectX), но в Директе смешивание должно выполняться по следующему правилу (внимательно смотрите теорию): сначала рисуются объекты без использования смешивания, а затем упорядоченно объекты со смешиванием, порядок следующий - начинается от самого дальнего объекта и заканчивается самым близким. То есть если внутренний куб рисуется без смешивания, то рисуй сначала его, если со смешиванием, то тут походу нада уже смотреть по граням: переднюю грань внешнего, затем переднюю грань внутреннего, затем заднюю грань внутреннего и уже потом заднюю грань внешнего, походу как то так, и не забываем отключать отбрасывание невидимых граней smile
Ну все это я писал с расчетом на то, что OpenGL и DirectX очень похожи, хотя это может быть полным абсурдом - х3, если что надеюсь на объяснение smile

Это сообщение отредактировал(а) EgoBrain - 5.11.2009, 12:51
PM MAIL ICQ Skype   Вверх
waran
Дата 5.11.2009, 14:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 4.11.2009

Репутация: нет
Всего: нет



спасибо, честно говоря про фичу "упорядочивания" я и понятия не имел, по идее оно должно просто блендится же по расстоянию...

если это так, то вопрос как тогда реализовать подобное "упорядочивание граней", если у меня куб вертится по всем осям  %0
(передняя становится потом задней то есть)
а про внутренний обьект, более сложный полигон я вообще молчу)

Это сообщение отредактировал(а) waran - 5.11.2009, 14:54
PM MAIL   Вверх
EgoBrain
Дата 6.11.2009, 01:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 537
Регистрация: 23.3.2008
Где: Комната

Репутация: нет
Всего: 2



Ну я х3. Если ты кубы строишь самостоятельно, то есть создаешь массив точек с указанием координат, то наверное в цикле бери каждую грань и смотри на каком расстоянии от "глаза" она находится в пространсве вида по оси Z. Если же ты строишь кубы по готовым примитивам бибилиотеки, то здесь наверное уже с настройками смешивания нада мутить.
PM MAIL ICQ Skype   Вверх
VirtualVoid
Дата 17.11.2009, 21:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 4.8.2009
Где: Сибирь

Репутация: нет
Всего: 1



Может сначала рисовать внутри куба, потом то что снаружи?

Цитата(EgoBrain @  5.11.2009,  17:47 Найти цитируемый пост)
х3 как в OpenGL (наверное так же как и в DirectX), но в Директе смешивание должно выполняться по следующему правилу (внимательно смотрите теорию): сначала рисуются объекты без использования смешивания, а затем упорядоченно объекты со смешиванием


В опенгл действительно все так и есть. При этом, насколько я помню, DST - это то что уже лежит в буфере цвета, а под SRC понимается цвет того, что выводится. Отсюда как раз и следует, что сначала рисуем непрозрачные объекты, а пото прозрачные, их закрывающие.

И про прозрачность написано в МСДН: glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA) - лучшая реализация прозрачности на фиксированном конвейере.

Добавлено через 4 минуты и 22 секунды
При этом внутренний непрозрачный объект должен корректно перекрыть заднюю грань куба. Про перекрытие задней грани передней гранью... это уже смотреть надо.
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Вы можете найти полезным что...
Alexeis
Rickert
  • Английская документация по DirectX лежит где-то здесь.
  • Английская документация по OpenGL лежит где-то там.
  • Гейм-дев у нас обсуждают где-то тут

Ждём вас! С уважением, Alexeis, Rickert.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Мультимедия, OpenGL/DirectX | Следующая тема »


 




[ Время генерации скрипта: 0.0452 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.