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

Уроки по DirectX

  Все выпуски  

Уроки по DirectX


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

Direct3D для Visual Basic.NET. Рассылки сайта progs.biz
Выпуск № 33
 
Начало > DirectX > Direct3D > VB.NET > Урок 21

С. Гайдуков. OpenGL. Профессиональное программирование трехмерной графики на C++.
С. Гайдуков. OpenGL. Профессиональное программирование трехмерной графики на C++
Заказать на Озоне

Подробнее


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

Direct3D для VB.NET
Урок 21. Использование буфера глубины (z-буфера) 1

Для начала несколько слов о том, что такое вообще буфер глубины. Представьте себе, что у вас есть несколько объектов, одни из которых расположены дальше, а другие ближе. Очевидно, что те, которые расположены ближе, должны полностью или частично заслонять те, которые находятся дальше. Так вот именно этим и будет заниматься буфер глубины. Без него же тот объект, которые будет рисоваться последним, окажеться спереди в нашем окне, несмотря на то, что по координатам он будет расположен дальше.

За окнову возьмем урок 8. На этом уроке мы создали один треугольник и сейчас наша задача - превратить его в два треугольника - расположенных один за другим.

Начинаем менять код. Во-первых, авайте слегка развернем наш треугольник. Это мы делаем в методе SetupMatrices:

    Private Sub SetupMatrices()
        ' Установка мировой матрицы.
        device.Transform.World = Matrix.RotationY(0.5)
        ...

Как вы видите, мы тут просто изменили параметр метода RotationY с нуля на 0.5.

Во-вторых, нам надо создать 2 треугольника. Для этого мы меняем метод OnCreateVertexBuffer, а именно добавляем в него еще один треугольник:

    Public Sub OnCreateVertexBuffer(ByVal sender As Object, _
    ByVal e As EventArgs)
        Dim vb As VertexBuffer = CType(sender, VertexBuffer)
        Dim verts As CustomVertex.PositionColored() = _
            CType(vb.Lock(0, 0), CustomVertex.PositionColored())
        'Задаем координаты и цвета вершин.
        verts(0).X = -1.0F
        verts(0).Y = -1.0F
        verts(0).Z = -0.5F
        verts(0).Color = System.Drawing.Color.Red.ToArgb()

        verts(1).X = 1.0F
        verts(1).Y = -1.0F
        verts(1).Z = -0.5F
        verts(1).Color = System.Drawing.Color.Red.ToArgb()

        verts(2).X = 0.0F
        verts(2).Y = 1.0F
        verts(2).Z = -0.5F
        verts(2).Color = System.Drawing.Color.Red.ToArgb()
        
        ' Добавление второго треугольника.
        verts(3).X = -1.0F
        verts(3).Y = -1.0F
        verts(3).Z = 0.5F
        verts(3).Color = System.Drawing.Color.DarkSeaGreen.ToArgb()

        verts(4).X = 1.0F
        verts(4).Y = -1.0F
        verts(4).Z = 0.5F
        verts(4).Color = System.Drawing.Color.DarkSeaGreen.ToArgb()

        verts(5).X = 0.0F
        verts(5).Y = 1.0F
        verts(5).Z = 0.5F
        verts(5).Color = System.Drawing.Color.DarkSeaGreen.ToArgb()
        
        vb.Unlock()
    End Sub

Обратите внимание, что наши треугольники растащены по оси z - у одного z-координата равна -0.5, у другого 0.5. Также обратите внимание, что у наших треугольников разный цвет (для наглядности).

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

    Private Sub Render()
        ...
        device.DrawPrimitives(PrimitiveType.TriangleList, 0, 2)
        ...

Для этого мы просто поменяли последний параметр в методе DrawPrimitives на 2.

Запускаем программу и видим неправильный результат - красный тругольник заслонен, хотя он должен быть впереди второго треугольника.

Исправим же мы это на следующем уроке.

Рассылки сайта 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 Игорь Алексеев

Subscribe.Ru
Поддержка подписчиков
Другие рассылки этой тематики
Другие рассылки этого автора
Подписан адрес:
Код этой рассылки: comp.soft.prog.directxlessons
Отписаться
Вспомнить пароль

В избранное