Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - .NET

Страница: 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-сайт: neco.pisem.net
 Профиль | | #1
Добавлено: 28.12.05 01:01
Возможно, потому, что вращение по оси Х подразумевается на относительно камеры, а относительно мира. Следовательно, если ты сначала повернул голову влево на 45 градусов, а потом начинаешь подымать голову вверх, то фигура, образованная лучом твоего взгляда будет не плоскостью, а чем-то типа конуса.

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам