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

Уроки по DirectX

  Все выпуски  

Уроки по DirectX


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

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

М. Фленов. Программирование на C++ глазами хакера.
М. Фленов. Программирование на C++ глазами хакера
Заказать на Озоне

Подробнее


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

Direct3D для VB.NET
Урок 18. Натягиваем текстуру на квадрат

Вообще говоря текстуры натягиваются на фигуры любой сложности, а не только на один треугольник, как было сделано на позапрошлом уроке.

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

Приступаем к коду. Разумеется, лучше всего в качестве заготовки взять пример прошлого урока, а не писать все заново.

Итак, начинаем вносить изменения в код предыдущего урока.

Во-первых, нам надо изменить наш вершинный буфер. Раньше в нем было три вершины, теперь будет шесть (по три у каждого треугольника). Вот так теперь будет выглядеть метод OnCreateVertexBuffer:

    ' Создание вершинного буфера.
    Public Sub OnCreateVertexBuffer(ByVal sender As Object, _
            ByVal e As EventArgs)
        Dim vb As VertexBuffer = CType(sender, VertexBuffer)
        ' texture
        Dim verts As CustomVertex.PositionNormalTextured() = _
            CType(vb.Lock(0, 0), CustomVertex.PositionNormalTextured())
        ' Первый треугольник.
        ' Первая вершина.
        verts(0).SetPosition(New Vector3(-1.0F, -1.0F, 0.0F))
        verts(0).SetNormal(New Vector3(1.0F, 0.0F, 0.0F))
        verts(0).Tu = 0
        verts(0).Tv = 1
        ' Вторая вершина.
        verts(1).SetPosition(New Vector3(1.0F, -1.0F, 0.0F))
        verts(1).SetNormal(New Vector3(1.0F, 0.0F, 0.0F))
        verts(1).Tu = 1
        verts(1).Tv = 1
        ' Третья вершина.
        verts(2).SetPosition(New Vector3(1.0F, 1.0F, 0.0F))
        verts(2).SetNormal(New Vector3(1.0F, 0.0F, 0.0F))
        verts(2).Tu = 1
        verts(2).Tv = 0
        ' Второй треугольник.
        ' Первая вершина.
        verts(3).SetPosition(New Vector3(-1.0F, -1.0F, 0.0F))
        verts(3).SetNormal(New Vector3(1.0F, 0.0F, 0.0F))
        verts(3).Tu = 0
        verts(3).Tv = 1
        ' Вторая вершина.
        verts(4).SetPosition(New Vector3(1.0F, 1.0F, 0.0F))
        verts(4).SetNormal(New Vector3(1.0F, 0.0F, 0.0F))
        verts(4).Tu = 1
        verts(4).Tv = 0
        ' Третья вершина.
        verts(5).SetPosition(New Vector3(-1.0F, 1.0F, 0.0F))
        verts(5).SetNormal(New Vector3(1.0F, 0.0F, 0.0F))
        verts(5).Tu = 0
        verts(5).Tv = 0
        vb.Unlock()
    End Sub

Как иы видите, вершин уже шесть. В совокупности они образуют квадрат с вершинами в точках (0, 0), (1, 0), (0, 1) и (1, 1). Также обратите внимание на то, как мы натягиваем на наши треугольники текстуру - за это, как вы помните, отвечают переменные Tu и Tv каждой вершины.

Теперь вносим небольшое изменение в метод OnCreateDevice. А именно в нем в для конструктора вершиного буфера меняем 3 на 6 (это просто число вершин):

    Public Sub OnCreateDevice(ByVal sender As Object, ByVal e As EventArgs)
        Dim dev As Device = CType(sender, Device)
        vertexBuffer = New VertexBuffer( _
            GetType(CustomVertex.PositionNormalTextured), 6, dev, 0, _
            CustomVertex.PositionNormalTextured.Format, Pool.Default)
        AddHandler vertexBuffer.Created, AddressOf Me.OnCreateVertexBuffer
        Me.OnCreateVertexBuffer(vertexBuffer, Nothing)
    End Sub

И, наконец, в методе Render мы указываем, что нам надо нарисовать две треугольника:

    Private Sub Render()
        ...
        ' Рисуем две теугольника.
        device.DrawPrimitives(PrimitiveType.TriangleList, 0, 2)

        'Заканчиваем сцену.
        ...
    End Sub

Все. Компилируем и запускаем нашу программу. Мы должны увидеть квадрат с натянутой на него текстурой.

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


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


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

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

В избранное