Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Как изменить объект mesh ???

37K
16 августа 2008 года
snakeskull
14 / / 02.08.2008
Разрабатываю прогу по эмуляции работы металлорежущего станка с ЧПУ. Описал перемещения суппорта с инструментом, шпинделя с цилиндрической заготовкой. Все красиво движется и вращается по заданной программе. :) Однако встал вопрос :confused: : резец при движении изменяет поверхность заготовки, а вот как это отрисовать? Резец и заготовку представил как meshRez и meshZag из файла *.X
Думаю что булеву операцию вычитания делать нужно, но как?

(Всё это дело делаю в VC++ 6 и DirectX 9.0)
341
16 августа 2008 года
Der Meister
874 / / 21.12.2007
Так в чём именно проблема? Вычитай...
37K
16 августа 2008 года
snakeskull
14 / / 02.08.2008
Цитата: Der Meister
Так в чём именно проблема? Вычитай...



LPD3DXMESH Rezec; // резец
LPD3DXMESH Zagotovka; // заготовка
..............................
Tак чтоли вычитать ?
Zagotovka = Zagotovka - Rezec; :)

Или нужно специальный сложный алгоритм писать? А встроенных в DirectX средств нету?

341
17 августа 2008 года
Der Meister
874 / / 21.12.2007
Встроенного нет. Зацени здесь и здесь. Ну, и в Википедию загляни с запросом Constructive solid geometry. Эмулировать, так эмулировать...
6.7K
22 августа 2008 года
Kessler
42 / / 02.08.2005
А при чем тут BSP-деревья? Они ведь предназначены в первую очереди для быстрого отсечения невидимых камере полигонов. Да и вообще для динамичных сцен они почти бесполезны, поскольку изменение BSP-дерева довольно ресурсоёмкая операция и в процессе выполнения динамичной программы этим лучше не заниматься. А CSG, я думаю, слишком сложная вещь для такой штуки как токарный станок... ;)
Как по мне, то лучше всего редактировать сетку заготовки. Можно было бы получать указатель на массив вершин с помощью ID3DXBaseMesh::LockVertexBuffer, приближать вершины "срезанной" поверхности к центру заготовки и разблокировать буфер с помощью ID3DXBaseMesh::UnlockVertexBuffer...
Но я не специалист (всего пару месяцев назад начал разбираться с Direct 3D). Поэтому могу ошибаться :)
341
22 августа 2008 года
Der Meister
874 / / 21.12.2007
Цитата: Kessler
А при чем тут BSP-деревья? Они ведь предназначены в первую очереди для быстрого отсечения невидимых камере полигонов. Да и вообще для динамичных сцен они почти бесполезны, поскольку изменение BSP-дерева довольно ресурсоёмкая операция и в процессе выполнения динамичной программы этим лучше не заниматься. А CSG, я думаю, слишком сложная вещь для такой штуки как токарный станок... ;)

Так ты материал почитай. В том-то и дело, что:
1) Булевы операции над телами проще всего осуществить именно с помощью BSP деревьев (в частности, для разности - буквально десять строк кода)
2) BSP деревья позволяют применять булевы операции в реальном времени.
3) BSP дерево для сцены построить не сложно. А уж статей написано даже на русском - не перечесть...

Цитата: Kessler
Можно было бы получать указатель на массив вершин с помощью ID3DXBaseMesh::LockVertexBuffer, приближать вершины "срезанной" поверхности к центру заготовки и разблокировать буфер с помощью ID3DXBaseMesh::UnlockVertexBuffer..

Не очень удачная идея для эмулятора: сетку придётся делать чересчур плотной. Отсюда, даже не вникая в детали, на ум приходят два нюанса:
а) Отрисовка происходит слижком долго
б) Большие затраты вычислительных мощей на изменение сетки

Деревья позволяют быстро выяснить, какие именно элементы (полигоны, вершины - что угодно) модели необходимо изменять.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог