Direct3D для VB.NET Урок 14. Пример сложного движения
На этом уроке мы слегка применим наши знания по матрицам, полученные на прошлых уроках. А именно, мы заставим наш треугольник совершать более сложные движения, чем просто вращение.
Наш треугольник будет то приближаться, то удаляться от нас, при этом он будет еще и вращаться. Т. е. движение нашего треугольника будет состоять из двух движений - поступательного и вращательного.
Для осуществления такого сложного движения мы должны построить матрицу для каждого составляющего ее движения - т. е. первую матрицу для поступательного и вторую матрицу для вращательного движения.
Но для начала слегка изменим код - так, чтобы наш треугольник выглядел более правильным.
Для этого мы, во-первых, поменяем матрицу вида в методе SetupMatrices
PrivateSub SetupMatrices()
...
' Установка матрицы вида.
device.Transform.View = Matrix.LookAtLH( _
New Vector3(0.0F, 0.0F, -5.0F), _
New Vector3(0.0F, 0.0F, 0.0F), _
New Vector3(0.0F, 1.0F, 0.0F))
...
Теперь наш взгляд идет точно вдоль оси Z.
Далее, поменяем в методе OnCreateVertexBuffer y-координату для третьей вершины:
PublicSub OnCreateVertexBuffer(ByVal sender As Object, ByVal e As EventArgs)
...
verts(2).Y = Math.Sqrt(3) - 1
...
теперь наш треугольник действительно правильный.
Теперь надо заняться самим движением. Для этого меняем мировую матрицу в методе SetupMatrices:
PrivateSub SetupMatrices()
'Скорость.Dim v AsInteger = 10000
' Получение текущего времени.Dim time AsInteger = Environment.TickCount Mod v
' Получение угла по текущему времени.Dim angle AsSingle = time * (2.0F * Math.PI) / v
' Расстояние.Dim len AsSingle' Меняем направление движения.If time - 5000 > 0 Then' Удаляемся.
len = time / (v / 100)
Else' Приближаемся.
len = 100 - time / (v / 100)
EndIf' Установка мировой матрицы.
device.Transform.World = _
Matrix.Multiply( _
Matrix.Translation(0, 0, len - 50), _
Matrix.RotationZ(angle))
...
Как вы видите, тут мы в числе прочего просто перемножаем две матрицы (методом Multiply) - матрицу перемещения (метод Translation) и матрицу вращения (метод RotationZ). Кроме того, мы ввели тут несколько переменных - для скорости, для расстояния и др.
Запускаем программу. Получаем треугольник, движущися по ожидаемой траектории.
PARKING.RU. Качественный ВИРТУАЛЬНЫЙ ХОСТИНГ на платформе Windows(r): поддержка NET, многофункциональная панель управления, аренда бизнес-приложений, сертифицированные специалисты. Управляемый ВЫДЕЛЕННЫЙ ХОСТИНГ на платформе Windows(r): производительные серверы, профессиональная поддержка, аренда ПО Microsoft(r), безопасность, гарантии. http://www.parking.ru