ПРОГРАМИРУЕМ 3D ГРАФИКУ ИСПОЛЬЗУЯ DirectX




Проверка попадания - часть 15


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. Действительно ли необходимо приводить точку попадания к мировым координатам? Можно ли добиться того же результата, не выполняя этого преобразования? Попробуйте модифицировать программу и посмотрите, будет ли она работать.

Итоги

Мы узнали, как выделять объекты, щелкая мышью в окне, как определить выделенную грань и положение точки попадания в объекте. Теперь у нас есть все необходимые инструменты для выделения трехмерных объектов и работы с ними. Если вы не следите за моими описаниями, я снова советую запустить отладчик и посмотреть, как происходит обработка сообщений мыши.




Содержание  Назад  Вперед