Direct3D для VB.NET Урок 18. Натягиваем текстуру на квадрат
Вообще говоря текстуры натягиваются на фигуры любой сложности, а не только на один треугольник, как было сделано на позапрошлом уроке.
На этом уроке мы слегка усложним задачу - а именно натянем текстуру на квадрат. Наша текстура тоже предстваляет из себя квадрат, но тем не менее так просто натянуть ее нельзя - надо нашу фигуру (квадрат) разбить на два треугольника, на каждый из которых мы натятем свой кусок текстуры.
Приступаем к коду. Разумеется, лучше всего в качестве заготовки взять пример прошлого урока, а не писать все заново.
Итак, начинаем вносить изменения в код предыдущего урока.
Во-первых, нам надо изменить наш вершинный буфер. Раньше в нем было три вершины, теперь будет шесть (по три у каждого треугольника). Вот так теперь будет выглядеть метод OnCreateVertexBuffer:
Как иы видите, вершин уже шесть. В совокупности они образуют квадрат с вершинами в точках (0, 0), (1, 0), (0, 1) и (1, 1). Также обратите внимание на то, как мы натягиваем на наши треугольники текстуру - за это, как вы помните, отвечают переменные Tu и Tv каждой вершины.
Теперь вносим небольшое изменение в метод OnCreateDevice. А именно в нем в для конструктора вершиного буфера меняем 3 на 6 (это просто число вершин):
PublicSub 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)
EndSub
И, наконец, в методе Render мы указываем, что нам надо нарисовать две треугольника: