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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вопросы по разработке редактора 3D моделей, редактор с некоторыми особенностями 
:(
    Опции темы
Vitaly333
Дата 22.4.2009, 15:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 220
Регистрация: 6.11.2006
Где: Volgograd

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



Нужно создать интерактивный редактор 3D моделей, состоящих из узлов  и стержней , соединяющих эти узлы. Добавление, удаление, выделение элеметов модели (узлов и стержней) должно производится с помошью мыши(и дополнительно с помошью диалогов). Повороты вокруг всех осей,маштабирование, проекции на все плоскости, перспектива и др. также должно производится с помощью мышки. Всё необходимо реализовать на OpenGL.
Приступив к реализации я стокнулся сразу же столкнулся со след. проблемами:
1.) Как находить точки пересечения узла и стержней в него входящих (они нужны для того чтобы не отрисовывать ту часть стержня, которая находится внутри узла)? Если узел представляеть в пространстве как куб (8 точек и 6 плоскостей) то нужно находить точку пересечения куба с прямой в пространстве. А это сложная задача (нужно решать систему неравенств), к тому же каждый раз проводить такие математические расчеты становится очень накладным для большого количества узлов. Если узел представлять как квадрат с 4-мя 3-мерными точками то находить точки пересечения уже легче, но при рендеринге он будет  выглядеть как квадрат только в проекции на одну плоскость (в проекциях на другие плоскости он будет выглядеть как линия). Нужно чтобы в любой проеции он выглядел как квадрат и в изометрии тоже. Может быть существует какое - нибудь спец.  решение в  OpenGL. 
2.) 2-ая проблема состоит в том  как с помощью мыши добавлять узлы при произвольном расположении осей XYZ. Ведь от мыши можно получить только две координаты. Как при этом правильно вычислять третью?
3.) 3-ая проблема связана с индетификацией узлов и стержней.  Как с помощью всё той же мыши можно выделить какой-либо узел или стержень также при произвольном расположении осей XYZ. У меня идея примерно следующая: построить проекции всех 3D - объектов на какую - нибудь плоскость (например на плоскость ХОY). Итак, зная координаты х,y каждого объекта и координаты х,y мыши можно узнать попали ли мы на  ХОY - проекцию трехмерного объекта или нет. Благо это сделать легко. При этом может возникнуть ситуация что курсор мыши попадет сразу же на проекции двух или более объектов. В этом случае нужно просмотреть 3-ю координату у этих объектов и выбрать тот у которого эта 3-я координата находится ближе к наблюдателю. Как то так... Возможно что это всё полный бред. Подскажите пож-та как это всё правильно реализовать или хотя бы примеры такого редактора с использованием мыши.


Это сообщение отредактировал(а) Vitaly333 - 22.4.2009, 15:05
PM MAIL   Вверх
Rickert
Дата 24.4.2009, 04:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ситхи не пройдут!
****


Профиль
Группа: Комодератор
Сообщений: 3356
Регистрация: 11.7.2006
Где: Лакрима

Репутация: 6
Всего: 52



0) Не понял вообще. Что такое стержень? Линия или некий цилиндр с определённым объёмом?
1, 2) Вроде вопрос один и тот же: как выделить объект в пространстве. Смотрите раздел OpenGL/DirectX, подфорума C++ - этот вопрос уже поднимался ни раз.
И объясните что значит "произвольное расположение осей XYZ"? Их произвольная направленность? Тогда хочется узнать: косоугольная или прямоугольная система координат используется. Или это речь о положнии точки начала координат?


--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
Vitaly333
Дата 24.4.2009, 20:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 220
Регистрация: 6.11.2006
Где: Volgograd

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



Цитата

Не понял вообще. Что такое стержень? Линия или некий цилиндр с определённым объёмом?

Стержень может быть представлен как линией так и цилиндром.

Цитата

объясните что значит "произвольное расположение осей XYZ"? Их произвольная направленность? Тогда хочется узнать: косоугольная или прямоугольная система координат используется. Или это речь о положнии точки начала координат?


Под произвольным расположением осей я понимаю произвольное положение начала координат  отн. наблюдателя (чел., смотрящего в монитор и щёлкующего на мышь). Изначально оси расположены в центре окна в которое выводится вся сцена, ось z - направлена к наблюдателю. Но после после преобразований положение начала координат уже будет изменено. Как тогда узнать каким координатам в МСК соответсвует каждая из двух координат, полученных от щелчка мыши и чему равна третья? 
PM MAIL   Вверх
Rickert
Дата 25.4.2009, 04:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ситхи не пройдут!
****


Профиль
Группа: Комодератор
Сообщений: 3356
Регистрация: 11.7.2006
Где: Лакрима

Репутация: 6
Всего: 52



Vitaly333

Правильно ли я вас понял: вы работаете с двухмерным пространством? Все вычисления как производятся?
И ещё вопрос: как вы сейчас определяете "место" курсора?

Это сообщение отредактировал(а) Rickert - 25.4.2009, 04:46


--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
Vitaly333
Дата 25.4.2009, 14:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 220
Регистрация: 6.11.2006
Где: Volgograd

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



Цитата

Правильно ли я вас понял: вы работаете с двухмерным пространством? Все вычисления как производятся?
И ещё вопрос: как вы сейчас определяете "место" курсора?

Нет.Работаю я с 3D. По крайней мере собираюсь это делать. Вычислений пока никаких нет. Это лишь мои предположения. Место курсора я определяю по его двум координатам x и y.
PM MAIL   Вверх
Чупакабро
Дата 25.4.2009, 15:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 220
Регистрация: 27.2.2007

Репутация: 2
Всего: 4



Цитата(Vitaly333 @  22.4.2009,  15:03 Найти цитируемый пост)
Как находить точки пересечения узла и стержней в него входящих (они нужны для того чтобы не отрисовывать ту часть стержня, которая находится внутри узла)? Если узел представляеть в пространстве как куб (8 точек и 6 плоскостей) то нужно находить точку пересечения куба с прямой в пространстве. А это сложная задача (нужно решать систему неравенств), к тому же каждый раз проводить такие математические расчеты становится очень накладным для большого количества узлов. Если узел представлять как квадрат с 4-мя 3-мерными точками то находить точки пересечения уже легче, но при рендеринге он будет  выглядеть как квадрат только в проекции на одну плоскость (в проекциях на другие плоскости он будет выглядеть как линия). Нужно чтобы в любой проеции он выглядел как квадрат и в изометрии тоже. Может быть существует какое - нибудь спец.  решение в  OpenGL. 

Чтобы не отрисовывать часть стержня внутри узла, есть z-буфер. И да, сделать пересечение прямой и плоскости, это не самая сложная задача)) Но это и не нужно.

Цитата(Vitaly333 @  22.4.2009,  15:03 Найти цитируемый пост)
2-ая проблема состоит в том  как с помощью мыши добавлять узлы при произвольном расположении осей XYZ. Ведь от мыши можно получить только две координаты. Как при этом правильно вычислять третью?

1) можно сделать 3 вида как в нормальном редакторе
2) можно сделать одну из координат фиксированной. тогда будет какая-то плоскость, в которой все узлы будут появляться. При повороте осей координат относительно исходного положения нужно находить проекции экранных координат на эту плоскость.

Цитата(Vitaly333 @  22.4.2009,  15:03 Найти цитируемый пост)
3-ая проблема связана с индетификацией узлов и стержней.  Как с помощью всё той же мыши можно выделить какой-либо узел или стержень также при произвольном расположении осей XYZ. У меня идея примерно следующая: построить проекции всех 3D - объектов на какую - нибудь плоскость (например на плоскость ХОY). Итак, зная координаты х,y каждого объекта и координаты х,y мыши можно узнать попали ли мы на  ХОY - проекцию трехмерного объекта или нет. Благо это сделать легко. При этом может возникнуть ситуация что курсор мыши попадет сразу же на проекции двух или более объектов. В этом случае нужно просмотреть 3-ю координату у этих объектов и выбрать тот у которого эта 3-я координата находится ближе к наблюдателю. Как то так... Возможно что это всё полный бред. Подскажите пож-та как это всё правильно реализовать или хотя бы примеры такого редактора с использованием мыши.

В OpenGL есть буфер выбора. Лень его описывать, может кто-нибудь еще здесь это сделает.
Можно сделать дополнительный буфер, куда рисовать объекты без учета освещения. Тогда выбор объекта сводится к определению цвета пикселя под мышью

--------------------
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   Вверх
unicuum
  Дата 30.4.2009, 22:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 830
Регистрация: 16.3.2005
Где: Рашка

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





--------------------
user posted image
обычный день на винграде
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Программирование игр, графики и искуственного интеллекта"
Rickert

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

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

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

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


 




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


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

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