Приставки
Nintendo (Dendy)
Nintendo 64
Sega Genesis
Sega CD / 32x
Master System
Super Nintendo
Turbo Grafx 16
Sega Saturn
Sony PlayStation
GameBoy Advance
GameBoy / Color
Game Gear
Atari
Другие

Утилиты
Системные утилиты
GoodXXXX
Sega CD / 32x
Nintendo 64
Переводы, хакинг
Музыка

Мир приставочных игр

Версия 2.00a

Leonis © 2002-2009
Команда Новости Помощь Ссылки
ПОМОЩЬ
Литература про игры
Предыдущая Следующая

В справочной информации по студии XNA Game Studio Express имеется показательный пример получения и переноса двухмерных координат мыши в трехмерную плоскость. Мы воспользуемся этим примером, который состоит из двух частей. Первая часть примера представлена методом GetPickRay(), где происходят получение текущих координат мыши и перенос их в трехмерное пространство.

Ray GetPickRay() {

mouseState = Mouse.GetStateO; int mouseX = mouseState.X; int mouseY = mouseState.Y;

Vector3 nearsource = new Vector3((float)mouseX, (float)mouseY, 0f); Vector3 farsource = new Vector3((float)mouseX, (float)mouseY, 1f); // мировая матрица, все значения ставим в ноль world = Matrix.CreateTranslation(0, 0, 0); // матрица вида

view = Matrix.CreateLookAt(new Vector3(0.0f, 0.0f, 150.0f), Vector3.Zero,

Vector3.Up);

// матрица проекции

proj = Matrix.CreatePerspectiveFieldOfView(FOV, aspectRatio, nearClip,

farClip);

// ближняя точка

Vector3 nearPoint = graphics.GraphicsDevice.Viewport.Unproject(nearsource, proj, view, world); // дальняя точка

Vector3 farPoint = graphics.GraphicsDevice.Viewport.Unproject(farsource, proj, view, world);

Vector3 direction = farPoint - nearPoint; direction.Normalize();

Ray pickRay = new Ray(nearPoint, direction); return pickRay;

}

Сложный метод, но его можно рассматривать как часть объектно-ориентированного программирования, когда совсем не обязательно знать, как работает тот или иной метод, или класс. Суть метода GetPickRay() заключается в переносе

308 Стреляем по целям

Целимся и стреляем 309

координат мыши в трехмерное пространство посредством матричных преобразований, и здесь имеется один очень важный нюанс.

Значения видовой и проекционной матриц для курсора мыши должны быть идентичны значениям аналогичных матриц для моделей, с которыми в дальнейшем будут обрабатываться условия по совпадению координат. Если видовая и проекционная матрицы будут разными, то курсор и модели будут находиться в разных виртуальных измерениях! Поэтому как для курсора, так и для моделей значение видовой и проекционной матриц у нас одинаково.

20.5. Целимся и стреляем

После того как вы сформировали метод GetPickRayO для переноса координат прицела из одной плоскости в другую, можно приступать к работе над вторым методом, который будет обрабатывать уже непосредственно столкновение объектов в пространстве. Для начала объявим в классе Gamel новый объект bb класса BoundingSphere.

public BoundingSphere[] bb = new BoundingSphere[3];


Предыдущая Следующая

Горяченькое

Друзья

Hosted by uCoz