Модераторы: Rickert
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Построение простых 3D объектов 
:(
    Опции темы
Bitter
Дата 29.6.2010, 20:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный лентяй
***


Профиль
Группа: Завсегдатай
Сообщений: 1209
Регистрация: 15.8.2004
Где: Харьков, Ukraine

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



Не подскажите, где почитать об алгоритмах построения простых фигур, как плоскость, параллелепипед, сфера и т.д. На основе параметрических данных типа ширина, высота. И еще, как им рассчитать текстурные координаты?

Спасибо
PM MAIL ICQ Skype   Вверх
Cheloveck
Дата 29.6.2010, 21:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1578
Регистрация: 26.7.2008
Где: Тула

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



можно тут поискать


--------------------
user posted image
PM Jabber   Вверх
Bitter
Дата 29.6.2010, 23:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный лентяй
***


Профиль
Группа: Завсегдатай
Сообщений: 1209
Регистрация: 15.8.2004
Где: Харьков, Ukraine

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



Cheloveck, спасибо, но там не очень полезная информация по построению фигур. Мне надо более продвинутые. Например, как нарисовать сферу, имея количество сегментов и радиус, нукак в популярных 3D редакторах. Или, например, куб, но не из 8 вершин, а который разбит на сегменты высоты, ширины и длинны, как в 3DMax, например. Да, и самое главное - как расчитать им текстурные координаты?

Добавлено через 1 минуту и 13 секунд
В принципе, я могу посидеть и написать алгоритмы эти, но если уже есть где посмотреть, зачем выдумывать снова. Может у кого есть?
PM MAIL ICQ Skype   Вверх
Чупакабро
Дата 9.7.2010, 20:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 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.
PM MAIL   Вверх
Bitter
Дата 9.7.2010, 21:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный лентяй
***


Профиль
Группа: Завсегдатай
Сообщений: 1209
Регистрация: 15.8.2004
Где: Харьков, Ukraine

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



Чупакабро, о, спасибо. В принципе получить координаты вершин шара не трудно, но там же еще триангуляция.... А за генерацию текстур спасибо, попробую.
PM MAIL ICQ Skype   Вверх
Чупакабро
Дата 9.7.2010, 21:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 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.
PM MAIL   Вверх
Bitter
Дата 9.7.2010, 22:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный лентяй
***


Профиль
Группа: Завсегдатай
Сообщений: 1209
Регистрация: 15.8.2004
Где: Харьков, Ukraine

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



Чупакабро, да, я примерно так и собирался делать, только я сначала думал сгенерить пару колец, а потом из этих вершин собирать 4х угольники. Кстати цилиндр и конус от сферы алгоритмически почти не отличаются. Единственное чем они отличаются - радиус колец во время спуска по оси Z. Так что написав генерацию сферы, получим сразу три фигуры. 

Еще есть геосфера. Но этот алгоритм в гугле валяется
PM MAIL ICQ Skype   Вверх
SVN74
Дата 28.7.2010, 18:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Ищите "Компьютерная графика - Виктор Порев"
PM MAIL WWW   Вверх
Bitter
Дата 29.7.2010, 14:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный лентяй
***


Профиль
Группа: Завсегдатай
Сообщений: 1209
Регистрация: 15.8.2004
Где: Харьков, Ukraine

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



SVN74, Спасибо большое, еще не читал, но судя по содержанию очень интересная книга.
PM MAIL ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Программирование игр, графики и искуственного интеллекта"
Rickert

НА ЗЛОБУ ДНЯ: Дорогие посетители, прошу обратить внимание что новые темы касающиеся новых вопросов создаются кнопкой "Новая тема" а не "Ответить"! Любые оффтопиковые вопросы, заданные в текущих тематических темах будут удалены а их авторы, при рецедиве, забанены.

  • Литературу, связанную с программированием графики, обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы связанные с программированием графики и мультимедии на языках С++ и Delphi
  • Вопросы по реализации алгоритмов рассматриваются здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rickert.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Программирование игр, графики и искусственного интеллекта | Следующая тема »


 




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


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

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