![]() |
Модераторы: LSD, AntonSaburov |
![]() ![]() ![]() |
|
SniyLSD |
|
||||||||
Новичок Профиль Группа: Участник Сообщений: 32 Регистрация: 28.5.2008 Репутация: нет Всего: нет |
Всем доброго времени суток!
У меня задание нарисовать динамическую 3-х мерную систему земля-луна с затенением земли луной и наоборот. С первой частью - нарисовать планету со спутником, натянуть текстуры и заставить их передвигаться по орбитам я сделал. но со вторым я в растерянности. Прошу помощи реализовать затенение. код 4-х классов: код правда ужасный ![]() И еще кажется нужно исправить отображение фона, а то он как-то некорректно выводится.. но это все потом. Буду очень рад, если поможете написать класс отрисовки теней. ЗЫ. Просьба не отсылать к мануалам, так как на их изучение нужно время которого у меня сейчас и так мало ![]() Главный класс
Класс LoadTexture
Класс Planets
Если будет нужно, я прикреплю файлы проекта (писалось все это в EasyEclipse Desktop Java) |
||||||||
|
|||||||||
EgorTheBlade |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 141 Регистрация: 5.12.2009 Репутация: нет Всего: -1 |
Можете сделать простой вариант.
Луна слева- закрасить в черный цвет левый бок земли. Луна справа - закрасить левый бок луны т.к земля отбрасывает тень на неё. Надеюсь,вы поняли что я хотел сказать. |
|||
|
||||
SniyLSD |
|
|||
Новичок Профиль Группа: Участник Сообщений: 32 Регистрация: 28.5.2008 Репутация: нет Всего: нет |
Если честно - то не очень...
Основная проблема - я не знаю как рассчитать, где должна лечь тень. Шары рисовал методом gluSphere и как наложить тень - то же не вкурсе( |
|||
|
||||
EgorTheBlade |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 141 Регистрация: 5.12.2009 Репутация: нет Всего: -1 |
Нет такого метода?
Если объект А (Луна) находится в координатах (X,Y) то закрасить половину объекта Б(Земля). |
|||
|
||||
SniyLSD |
|
|||
Новичок Профиль Группа: Участник Сообщений: 32 Регистрация: 28.5.2008 Репутация: нет Всего: нет |
Такого метода не встречал. Может попробовать с помощью буфера трафарета?
Правда у меня сфера, а не плоскость. Поможет ли это? Это сообщение отредактировал(а) SniyLSD - 25.1.2011, 10:33 |
|||
|
||||
SniyLSD |
|
|||
Новичок Профиль Группа: Участник Сообщений: 32 Регистрация: 28.5.2008 Репутация: нет Всего: нет |
Ладно, следующий вопрос - как мне применяя буфер трафарета спроецировать луну на землю так, чтобы тень рисовалась на поверхности земли?
|
|||
|
||||
math64 |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 8 Всего: 72 |
Насколько я понимаю, нужно создать объект Солнце - источник света (у тебя есть Земля, Луна, звёзды) - и тогда тень сама нарисуется.
|
|||
|
||||
Amp |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 886 Регистрация: 17.2.2009 Репутация: 3 Всего: 17 |
Посмотри в гугле по фразе "shadow volumes". Вкратце - исходя из положения источника света и объекта, который отбрасывает тень, строится некая фигура, которая определяет границы тени (для сферы она будет в виде цилиндра или конуса, ось которого проходит через центр сферы и точки, где находится источник света). Далее, с помощью манипуляций с буфером трафарета и отрисовкой полупрозрачного полигона на весь экран, добиваются эффекта тени. В итоге - будет самозатенение (как раз для полушария) и тень на других объектах. Для сфер все сильно упрощается, т.к. не надо реализовывать алгоритм нахождение контура тени на объекте - это будет окружность. В итоге надо просто построить конус (или цилиндр, в случае если лучи воображаемого источника света считаются параллельными), который уходит в бесконечность и применить буфер трафарета, чтобы вырезать часть полупрозрачного полигона. |
|||
|
||||
SniyLSD |
|
|||
Новичок Профиль Группа: Участник Сообщений: 32 Регистрация: 28.5.2008 Репутация: нет Всего: нет |
Вот это уже ближе!
![]() ![]() У вас есть возможность написать маленький пример статичной системы с тенью основанной на этом методе? ![]() Думаю не только мне это пригодится. Информации в интернете по jogl на русском языке маловато, если не сказать, что вообще нету. |
|||
|
||||
Amp |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 886 Регистрация: 17.2.2009 Репутация: 3 Всего: 17 |
То, как и что будет писаться в буфер определяется параметрами функций glStencilFunc/Op/Mask. По ссылке приведена блок-схема с подробным заданием параметров для stencil buffer-а http://www.opengl.org/resources/code/sampl.../rts/index.html
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "Java" | |
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |