Отправляет email-рассылки с помощью сервиса Sendsay

Уроки по DirectX

  Все выпуски  

Уроки по DirectX


Информационный Канал Subscribe.Ru

Direct3D для Visual Basic.NET. Рассылки сайта progs.biz
Рассылка № 18
 
Начало > DirectX > Direct3D > VB.NET > Урок 14

М. Макдональд. Рецепты программирования на Visual Basic.NET.
М. Макдональд. Рецепты программирования на Visual Basic.NET.
Заказать на Озоне

Подробнее


Полные версии уроков (с картинками): урок 14.

Direct3D для VB.NET
Урок 14. Пример сложного движения

На этом уроке мы слегка применим наши знания по матрицам, полученные на прошлых уроках. А именно, мы заставим наш треугольник совершать более сложные движения, чем просто вращение.

Наш треугольник будет то приближаться, то удаляться от нас, при этом он будет еще и вращаться. Т. е. движение нашего треугольника будет состоять из двух движений - поступательного и вращательного.

Для осуществления такого сложного движения мы должны построить матрицу для каждого составляющего ее движения - т. е. первую матрицу для поступательного и вторую матрицу для вращательного движения.

Но для начала слегка изменим код - так, чтобы наш треугольник выглядел более правильным.

Для этого мы, во-первых, поменяем матрицу вида в методе SetupMatrices

    Private Sub 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-координату для третьей вершины:

Public Sub OnCreateVertexBuffer(ByVal sender As Object, ByVal e As EventArgs)
    ...
    verts(2).Y = Math.Sqrt(3) - 1
    ...

теперь наш треугольник действительно правильный.

Теперь надо заняться самим движением. Для этого меняем мировую матрицу в методе SetupMatrices:

    Private Sub SetupMatrices()
        'Скорость.
        Dim v As Integer = 10000
        ' Получение текущего времени.
        Dim time As Integer = Environment.TickCount Mod v
        ' Получение угла по текущему времени.
        Dim angle As Single = time * (2.0F * Math.PI) / v
        ' Расстояние.
        Dim len As Single
        ' Меняем направление движения.
        If time - 5000 > 0 Then
            ' Удаляемся.
            len = time / (v / 100)
        Else
            ' Приближаемся.
            len = 100 - time / (v / 100)
        End If
        ' Установка мировой матрицы.
        device.Transform.World = _
            Matrix.Multiply( _
            Matrix.Translation(0, 0, len - 50), _
            Matrix.RotationZ(angle))
        ...

Как вы видите, тут мы в числе прочего просто перемножаем две матрицы (методом Multiply) - матрицу перемещения (метод Translation) и матрицу вращения (метод RotationZ). Кроме того, мы ввели тут несколько переменных - для скорости, для расстояния и др.

Запускаем программу. Получаем треугольник, движущися по ожидаемой траектории.

Рассылки сайта progs.biz
Visual C++, MFC
C# и .NET
VB.NET
Win API
C/C++
Delphi
Java
HTML, PHP, mySQL, WEB-дизайн
Flash MX new!
C++ Builder
Ассемблер
SQL Server
DirectX
Обзор книг
Обзор программ
Новости сайта progs.biz


PARKING.RU. Качественный ВИРТУАЛЬНЫЙ ХОСТИНГ на платформе Windows(r): поддержка NET, многофункциональная панель управления, аренда бизнес-приложений, сертифицированные специалисты. Управляемый ВЫДЕЛЕННЫЙ ХОСТИНГ на платформе Windows(r): производительные серверы, профессиональная поддержка, аренда ПО Microsoft(r), безопасность, гарантии. http://www.parking.ru


Копирование любых материалов сайта без разрешения авторов и владельцев сайта запрещено.
© 2002-2004 сайт progs.biz
© 2002-2004 Алексеев Игорь

http://subscribe.ru/
http://subscribe.ru/feedback/
Подписан адрес:
Код этой рассылки: comp.soft.prog.directxlessons
Отписаться

В избранное