![]() |
|
Модераторы: Rickert, Alexeis, BorisVorontsov |
![]()
|
|
| waran |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 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); Че то получается так, что "обьект" в кубе никогда не виден (или выбирается режим что вся картинка черная) А когда куб не рисую, "обьект" виден нормально Ну если не считать что некоторые нормали повернуты не так, но это не важно мне просто надо понять сам прикол почему его тупо не видно внутри куба |
|||
|
||||
| EgoBrain |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 537 Регистрация: 23.3.2008 Где: Комната Репутация: нет Всего: 2 |
х3 как в OpenGL (наверное так же как и в DirectX), но в Директе смешивание должно выполняться по следующему правилу (внимательно смотрите теорию): сначала рисуются объекты без использования смешивания, а затем упорядоченно объекты со смешиванием, порядок следующий - начинается от самого дальнего объекта и заканчивается самым близким. То есть если внутренний куб рисуется без смешивания, то рисуй сначала его, если со смешиванием, то тут походу нада уже смотреть по граням: переднюю грань внешнего, затем переднюю грань внутреннего, затем заднюю грань внутреннего и уже потом заднюю грань внешнего, походу как то так, и не забываем отключать отбрасывание невидимых граней
Ну все это я писал с расчетом на то, что OpenGL и DirectX очень похожи, хотя это может быть полным абсурдом - х3, если что надеюсь на объяснение Это сообщение отредактировал(а) EgoBrain - 5.11.2009, 12:51 |
|||
|
||||
| waran |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 4.11.2009 Репутация: нет Всего: нет |
спасибо, честно говоря про фичу "упорядочивания" я и понятия не имел, по идее оно должно просто блендится же по расстоянию...
если это так, то вопрос как тогда реализовать подобное "упорядочивание граней", если у меня куб вертится по всем осям %0 (передняя становится потом задней то есть) а про внутренний обьект, более сложный полигон я вообще молчу) Это сообщение отредактировал(а) waran - 5.11.2009, 14:54 |
|||
|
||||
| EgoBrain |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 537 Регистрация: 23.3.2008 Где: Комната Репутация: нет Всего: 2 |
Ну я х3. Если ты кубы строишь самостоятельно, то есть создаешь массив точек с указанием координат, то наверное в цикле бери каждую грань и смотри на каком расстоянии от "глаза" она находится в пространсве вида по оси Z. Если же ты строишь кубы по готовым примитивам бибилиотеки, то здесь наверное уже с настройками смешивания нада мутить.
|
|||
|
||||
| VirtualVoid |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 52 Регистрация: 4.8.2009 Где: Сибирь Репутация: нет Всего: 1 |
Может сначала рисовать внутри куба, потом то что снаружи?
В опенгл действительно все так и есть. При этом, насколько я помню, DST - это то что уже лежит в буфере цвета, а под SRC понимается цвет того, что выводится. Отсюда как раз и следует, что сначала рисуем непрозрачные объекты, а пото прозрачные, их закрывающие. И про прозрачность написано в МСДН: glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA) - лучшая реализация прозрачности на фиксированном конвейере. Добавлено через 4 минуты и 22 секунды При этом внутренний непрозрачный объект должен корректно перекрыть заднюю грань куба. Про перекрытие задней грани передней гранью... это уже смотреть надо. |
|||
|
||||
![]()
|
| Вы можете найти полезным что... | |
|
|
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Мультимедия, OpenGL/DirectX | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |