![]() |
|
Модераторы: Snowy, Alexeis, MetalFan |
![]()
|
|
| nght_elf |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 26.12.2007 Репутация: нет Всего: нет |
Народ помогите пожалуйста дописать програмку.
Её суть- просто построить некоторуя фигуру, которую я построил, но не смог разобраться с освещением.. Вот её код, да, к стати, что-то мне подсказывает, что реализация задачи выполнена через заднее место.. Если вы увидете способ, как такую фигуру построить подругому- напишите плиз..
фигура- часть цилиндра, построенного из множества(400 шт) прямоугольников.. я находил вектора номали по стандартному способу- но лажа в том, что прямоугольники в данном примере практически сводятся к отрезку, т.к. их ширина стремится к нулю.. К сожалению число 700 здесь необходимо, и предложения уменьшить число плоскостей не подходит, к поставленной мне задачи.. |
|||
|
||||
| DragonFire |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 725 Регистрация: 14.8.2005 Где: Москва Репутация: 1 Всего: 9 |
Когда-то давно, классе в 10 писал прожку...
Там надо было загрузить из 3Дмакса объект с нормальным освещением. Я стоил нормали к каждой вершине по алгоритму: Перебираются все вершины фигуры, для каждой из них: 1) Перебираются все грани (плоскости), содержащие вершину 2) Находится нормаль к этой плоскости (по 3 точкам) 3) Все вектора нормалей суммируются 4) Происходит нормировка полученного вектора 5) Все данные передаются в OpenGL У меня есть код, но там все повязано на объектак и векторах, но мб поможет, вот процедура нормировки:
Добавлено через 1 минуту и 47 секунд Это вдогонку:
|
||||
|
|||||
| nght_elf |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 26.12.2007 Репутация: нет Всего: нет |
Поясни алгоритм поподробнее пожалуйста.
|
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 55 Всего: 459 |
nght_elf, векторное произведение 2х векторов дает вектор нормали, но его нужно нормировать на единицу, т.е. разделить каждую из координат на длину вектора нормали. В зависимость от того как задавать порядок вершин по часовой или против получается либо внутренняя нормаль либо наружная.
-------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| DragonFire |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 725 Регистрация: 14.8.2005 Где: Москва Репутация: 1 Всего: 9 |
Alexeis, Именно) линал азы...
А алгоритм... Строим нормали к каждой вершине. Сначало большой цикл по всем вершинам. Вначале вектор нормали к вершине - нулевой. 1) Перебираются все грани (плоскости), содержащие вершину Тут цикл, который проходит по всем граням. Если текущая вершина принадлежит грани, то мы прибавляем к уже полученному вектору нормали вершины (на самом первом шаге - к нулевому вектору), нормаль к плоскости. 2) Находится нормаль к этой плоскости (по 3 точкам) Тут берутся 3 вершины любые принадлежащие грани, по ним строится нормаль ( как это сделать где-то на форуме было, ищи по "нормаль к плоскости по трем точкам"). 3) Происходит нормировка полученного вектора Тут цикл по вершинам заканчивается. И ПОлученные вектора нормалей все делятся на свои длины. 4) Все данные передаются в OpenGL Тут вроде все ясно - перед каждой glVertex вызываем glNormal |
|||
|
||||
![]()
|
| Правила форума "Delphi: Звук, графика и видео" | |
|
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делится вскрытыми компонентами
FAQ раздела лежит здесь! Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Girder, Snowy. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Звук, графика и видео | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |