На уроке 4 мы нарисовали треугольник. На настоящем и нескольких последующих уроках мы будем делать почти тоже самое - единственное отличие в том, что в уроке 4 мы использовали однородные координаты, а тут мы будем использовать обычные (разницу между теми и дугими мы расссмотрим позже, на одном из последующих уроков).
Итак, начинаем изменять наш код из урока 4.
Во-первых, нам надо поменять везде TransformedColored на PositionColored. Это разные формы представления вершин. Это надо сделать в нескольких местах. Во-первых, в методе OnCreateVertexBuffer:
' Создание вершинного буфера.PublicSub 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.0F
verts(0).Color = System.Drawing.Color.Aqua.ToArgb()
verts(1).X = 1.0F
verts(1).Y = -1.0F
verts(1).Z = 0.0F
verts(1).Color = System.Drawing.Color.Brown.ToArgb()
verts(2).X = 0.0F
verts(2).Y = 1.0F
verts(2).Z = 0.0F
verts(2).Color = System.Drawing.Color.LightPink.ToArgb()
vb.Unlock()
EndSub
Обратите внимание, что по сравнении с уроком 4 мы тут при заполнении вершин данными убрали строки вида
...
verts(...).Rhw = 1
...
Это мы сделали потому, что у нас теперь другой формат вершин и никакого Rhw там просто нет. Также обратите внимание на то, что теперь координаты вершин не такие большие - они уже не в пискелах.
Во-вторых, в методе OnCreateDevice:
PublicSub OnCreateDevice
(ByVal sender As Object, ByVal e As EventArgs)
...
vertexBuffer = _
New VertexBuffer(GetType(CustomVertex.PositionColored), _
3, dev, 0, CustomVertex.PositionColored.Format, _
Pool.Default)
...
EndSub