Страница: 1 |
Страница: 1 |
Вопрос: Помогите с движение от первого лица в Direct3D
Добавлено: 14.12.05 12:42
Автор вопроса: Евгений | ICQ: 285236670
Хочу сделать движение от первого лица на VB.NET. Пытался делать так:
Перед рендерингом вызываю функцию
Public Sub AscKey()
If Keyb(Keys.Up) Then 'Вперед
device.Transform.View = Matrix.Multiply( _
device.Transform.View, _
Matrix.Translation(New Vector3(0, 0, -1)))
End If
If Keyb(Keys.Down) Then 'Назад
device.Transform.View = Matrix.Multiply( _
device.Transform.View, _
Matrix.Translation(New Vector3(0, 0, 1)))
End If
If Keyb(Keys.Left) Then 'Шаг влево
device.Transform.View = Matrix.Multiply( _
device.Transform.View, _
Matrix.Translation(New Vector3(1, 0, 0)))
End If
If Keyb(Keys.Right) Then 'Шаг вправо
device.Transform.View = Matrix.Multiply( _
device.Transform.View, _
Matrix.Translation(New Vector3(-1, 0, 0)))
End If
If Keyb(Keys.NumPad4) Then 'Поворот влево
device.Transform.View = Matrix.Multiply( _
device.Transform.View, _
Matrix.RotationAxis(New Vector3(0, 1, 0), 0.01))
End If
If Keyb(Keys.NumPad6) Then 'Поворот вправо
device.Transform.View = Matrix.Multiply( _
device.Transform.View, _
Matrix.RotationAxis(New Vector3(0, 1, 0), -0.01))
End If
If Keyb(Keys.NumPad8) Then 'Поворот вверх
device.Transform.View = Matrix.Multiply( _
device.Transform.View, _
Matrix.RotationX(0.01))
End If
If Keyb(Keys.NumPad5) Then 'Поворот вниз
device.Transform.View = Matrix.Multiply( _
device.Transform.View, _
Matrix.RotationX(-0.01))
End If
End Sub
При нажатии клавиш: Keyb(e.KeyCode) = True. где Keyb - массив клавиш.
Вроде работает, но когда вращаешь по оси Y и оси Z, то все искажается поворотом по оси X. Т.е. когда из одной точки повращался и вернулся в исходную точку ощущение, что повернул голову вбок. Подскажите, пжлста, в чем ошибка и как сделать правильно на VB.NET.
Ответы
Всего ответов: 1
Номер ответа: 1
Автор ответа:
Neco
ICQ: 247906854
Вопросов: 133
Ответов: 882
Web-сайт:
Профиль | | #1
Добавлено: 28.12.05 01:01
Возможно, потому, что вращение по оси Х подразумевается на относительно камеры, а относительно мира. Следовательно, если ты сначала повернул голову влево на 45 градусов, а потом начинаешь подымать голову вверх, то фигура, образованная лучом твоего взгляда будет не плоскостью, а чем-то типа конуса.