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

Уроки по DirectX

  Все выпуски  

Уроки по DirectX


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

Direct3D для Visual Basic.NET. Рассылки сайта progs.biz
Рассылка № 20
С Новым Годом и Рождеством!
 
Начало > DirectX > Direct3D > VB.NET > Урок 16

Джим Адамс. DirectX: продвинутая анимация.
Джим Адамс. DirectX: продвинутая анимация
Заказать на Озоне

Подробнее


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

Direct3D для VB.NET
Урок 16. Использование текстуры: часть 1

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

Вот план наших действий: сначала мы определим новый формат наших вершин. А именно укажем, что они будут использовать текстуры. Далее мы заведем в классе переменную типа Texture для текстуры. Потом мы загрузим некоторый файл с жесткого диска в эту переменную. Шаг следующий - мы должны переопределить в методе OnCreateVertexBuffer наши вершины (а именно кроме координат задать для них текстурные координаты - т. е. способ, которым текстура будет накладываться на конкретный треугольник в нашей модели). И, наконец, мы должы изменить отрисовку в методе Render - а именно установить загруженную из файла текстуру для нашего устройства и задать для нее некоторые параметры отображения.

Вот такой план. Приступаем к его осуществению.

Шаг первый - изменение формата наших вершин:

    Public Sub OnCreateDevice(ByVal sender As Object, ByVal e As EventArgs)
        ...
        ' Задание формата вершин.
        vertexBuffer = New VertexBuffer( _
            GetType(CustomVertex.PositionNormalTextured), 3, dev, 0, _
            CustomVertex.PositionNormalTextured.Format, Pool.Default)
        ...
    End Sub

Обратите внимание, что тут мы используем для задания вершин тип CustomVertex.PositionNormalTextured. Именно такой тип должны иметь вершины для использования вершин.

Шаг второй и третий - объявление переменной для текстуры и загрузка в эту переменную текстуры из файла:

Public Class Form1
    Inherits System.Windows.Forms.Form
    ...
    ' Переменая для текстуры.
    Private texture As Texture = Nothing
    ...
    Public Sub OnResetDevice(ByVal sender As Object, ByVal e As EventArgs)
        ...
        ' Загрузка текстуры из файла.
        texture = TextureLoader.FromFile(device, "c:\tmp\dx.bmp")
    End Sub

Разумеется, файл dx.bmp должен существовать. Формат его может быть и другим (jpg, gif и др.). Рекомендуется, что бы картинка в этом файле имела размеры, кратные степеням двойки (4, 8, 16, 32, 64 и т. п.).

Шаг четвертый - переопределение вершин в методе OnCreateVertexBuffer:

    Public Sub OnCreateVertexBuffer _
        (ByVal sender As Object, ByVal e As EventArgs)
        Dim vb As VertexBuffer = CType(sender, VertexBuffer)
        ' Тут мы теперь используем тип PositionNormalTextured.
        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 = 0
        ' Вторая вершина.
        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(0.0F, Math.Sqrt(3) - 1, 0.0F))
        verts(2).SetNormal(New Vector3(1.0F, 0.0F, 0.0F))
        verts(2).Tu = 1
        verts(2).Tv = 0
        vb.Unlock()
    End Sub

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

Пожалуй, с этим уроком все. Остальные действия мы сделаем на следующием уроке.

Рассылки сайта 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
Отписаться

В избранное