![]() |
|
Модераторы: Rickert |
![]()
|
|
| Bitter |
|
|||
![]() Опытный лентяй ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1209 Регистрация: 15.8.2004 Где: Харьков, Ukraine Репутация: 5 Всего: 27 |
Не подскажите, где почитать об алгоритмах построения простых фигур, как плоскость, параллелепипед, сфера и т.д. На основе параметрических данных типа ширина, высота. И еще, как им рассчитать текстурные координаты?
Спасибо |
|||
|
||||
| Cheloveck |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1578 Регистрация: 26.7.2008 Где: Тула Репутация: нет Всего: 32 |
можно тут поискать
-------------------- ![]() |
|||
|
||||
| Bitter |
|
|||
![]() Опытный лентяй ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1209 Регистрация: 15.8.2004 Где: Харьков, Ukraine Репутация: 5 Всего: 27 |
Cheloveck, спасибо, но там не очень полезная информация по построению фигур. Мне надо более продвинутые. Например, как нарисовать сферу, имея количество сегментов и радиус, нукак в популярных 3D редакторах. Или, например, куб, но не из 8 вершин, а который разбит на сегменты высоты, ширины и длинны, как в 3DMax, например. Да, и самое главное - как расчитать им текстурные координаты?
Добавлено через 1 минуту и 13 секунд В принципе, я могу посидеть и написать алгоритмы эти, но если уже есть где посмотреть, зачем выдумывать снова. Может у кого есть? |
|||
|
||||
| Чупакабро |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 220 Регистрация: 27.2.2007 Репутация: 2 Всего: 4 |
Для сферы:
A - угол между осью Y и плоскостью XZ ("широта") {0;pi} B - угол поворота в плоскости XZ ("долгота") {0;2*pi} x = sin(A) * cos(B)*R y = sin(A) * sin(B) *R z = cos(A)*R если текстура в виде проекции глобуса на плоскость (не помню как называется, по форме похожа на эллипс), то наверное вот так: u=0.25*sin(A-pi/2)*B/pi+0.5 v=A/pi если рисунок текстуры расположен по всей площади прямоугольника (надо учитывать, что около нижнего и верхнего края рисунок будет сжиматься, и соответственно, текстура тут должна быть растянута), то u=0.5*B/pi v=A/pi Как-то наверное так... Хотя это я так прикинул, может где ошибся. Это сообщение отредактировал(а) Чупакабро - 9.7.2010, 20:50 --------------------
Project Project1.exe raised exception class EAccessViolation with message 'Access violation at address 00459B8B in module 'Project1.exe'. Read of address 0000019C'. Process stopped. Use Step or Run to continue. |
|||
|
||||
| Bitter |
|
|||
![]() Опытный лентяй ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1209 Регистрация: 15.8.2004 Где: Харьков, Ukraine Репутация: 5 Всего: 27 |
Чупакабро, о, спасибо. В принципе получить координаты вершин шара не трудно, но там же еще триангуляция.... А за генерацию текстур спасибо, попробую.
|
|||
|
||||
| Чупакабро |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 220 Регистрация: 27.2.2007 Репутация: 2 Всего: 4 |
я треугольники делаю в два приема:
одельно для "приполярных" областей - берется например верхняя вершина и к ней добавляются последовательно по 2 вершины , расположенные на первой "параллели", т.е. A=da, где da - угловой шаг от полюса к полюсу. потом я делаю попарно треугольники, образующие четырехугольники (пардон за мой французский) p1.x=sin(i*da) * cos(j*db)*R p1.y=sin(i*da) * cos(j*db)*R p1.z=cos(i*da)*R p2.x=sin((i+1)*da) * cos(j*db)*R p2.y=sin((i+1)*da) * cos(j*db)*R p2.z=cos((i+1)*da)*R p3.x=sin((i+1)*da) * cos((j+1)*db)*R p3.y=sin((i+1)*da) * cos((j+1)*db)*R p3.z=cos((i+1)*da)*R второй треугольник (в четырехугольнике) p1.x=sin(i*da) * cos(j*db)*R p1.y=sin(i*da) * cos(j*db)*R p1.z=cos(i*da)*R p2.x=sin((i+1)*da) * cos((j+1)*db)*R p2.y=sin((i+1)*da) * cos((j+1)*db)*R p2.z=cos((i+1)*da)*R p3.x=sin(i*da) * cos((j+1)*db)*R p3.y=sin(i*da) * cos((j+1)*db)*R p3.z=cos(i*da)*R Правда, всегда путаюсь с направлением обхода вершин по или против часовой стрелки Но метод тыка никто не отменял)) Это сообщение отредактировал(а) Чупакабро - 9.7.2010, 21:50 --------------------
Project Project1.exe raised exception class EAccessViolation with message 'Access violation at address 00459B8B in module 'Project1.exe'. Read of address 0000019C'. Process stopped. Use Step or Run to continue. |
|||
|
||||
| Bitter |
|
|||
![]() Опытный лентяй ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1209 Регистрация: 15.8.2004 Где: Харьков, Ukraine Репутация: 5 Всего: 27 |
Чупакабро, да, я примерно так и собирался делать, только я сначала думал сгенерить пару колец, а потом из этих вершин собирать 4х угольники. Кстати цилиндр и конус от сферы алгоритмически почти не отличаются. Единственное чем они отличаются - радиус колец во время спуска по оси Z. Так что написав генерацию сферы, получим сразу три фигуры.
Еще есть геосфера. Но этот алгоритм в гугле валяется |
|||
|
||||
| SVN74 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 740 Регистрация: 5.5.2008 Где: Комсомольск на Дн епре Репутация: 1 Всего: 18 |
Ищите "Компьютерная графика - Виктор Порев"
|
|||
|
||||
| Bitter |
|
|||
![]() Опытный лентяй ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1209 Регистрация: 15.8.2004 Где: Харьков, Ukraine Репутация: 5 Всего: 27 |
SVN74, Спасибо большое, еще не читал, но судя по содержанию очень интересная книга.
|
|||
|
||||
![]()
|
| Правила форума "Программирование игр, графики и искуственного интеллекта" | |
|
|
НА ЗЛОБУ ДНЯ: Дорогие посетители, прошу обратить внимание что новые темы касающиеся новых вопросов создаются кнопкой "Новая тема" а не "Ответить"! Любые оффтопиковые вопросы, заданные в текущих тематических темах будут удалены а их авторы, при рецедиве, забанены.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rickert. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Программирование игр, графики и искусственного интеллекта | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |