и перейти от локальных координат
void CMainFrame::AddBlob(C3dShape* pShape, C3dVector& vHit) {
// Определить точку попадания
// и перейти от локальных координат к мировым
ASSERT(pShape) ;
C3dVector vh = pShape-»Transform (vHit) ;
// Создать новое пятно C3dShape* pBlob = new C3dShape;
pBlob-»CreateSphere (0.5, 4);
// Установить его центр в точке попадания pBlob-»SetPosition(vh) ;
// Присоединить пятно к фигуре pShape-»AddChild (pBlob) ;
// Включить новое пятно в список фигур,
// чтобы можно было проверять попадание в него
m_pScene-»m_ShapeList. Append (pBlob) ;
}
/b> Уу Глава 7. Проверка попадания
Координаты точки попадания приводятся к мировым координатам. Мы создаем новое пятно, задаем его положение и присоединяем к текущей фигуре. Обратите внимание на то, что новый объект (пятно) присоединяется к списку фигур, тем самым мы обеспечиваем его удаление при уничтожении всего макета. Помните, что для правильной работы проверки попаданий нельзя удалять использованные объекты C++.
Предлагаю выполнить небольшое упражнение. Посмотрите на исходный текст функции AddBlob. Действительно ли необходимо приводить точку попадания к мировым координатам? Можно ли добиться того же результата, не выполняя этого преобразования? Попробуйте модифицировать программу и посмотрите, будет ли она работать.
Итоги
Мы узнали, как выделять объекты, щелкая мышью в окне, как определить выделенную грань и положение точки попадания в объекте. Теперь у нас есть все необходимые инструменты для выделения трехмерных объектов и работы с ними. Если вы не следите за моими описаниями, я снова советую запустить отладчик и посмотреть, как происходит обработка сообщений мыши.
Содержание Назад Вперед
Forekc.ru
Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий