کد:
کد:
Private Function InitialiseGeometry() As Boolean
On Error GoTo BailOut:
TriStrip(0) = CreateTLVertex(100, 100, 0, 1, RGB(255, 255, 255), 0, 0, 0)
TriStrip(1) = CreateTLVertex(300, 100, 0, 1, RGB(255, 0, 0), 0, 0, 0)
TriStrip(2) = CreateTLVertex(100, 300, 0, 1, RGB(0, 255, 0), 0, 0, 0)
TriStrip(3) = CreateTLVertex(300, 300, 0, 1, RGB(0, 0, 255), 0, 0, 0)
InitialiseGeometry = True
Exit Function
BailOut:
InitialiseGeometry = False
End Function
همانطور که مشاهده می کنید برای تعریف Vertex از تابع CreateTLVertex استفاده شده است. این تابع صرفاً مقادیر ساختار TLVERTEX را مقداردهی می کند:
کد:
کد:
Private Function CreateTLVertex(X As Single, Y As Single, Z As Single, rhw As Single,
color As Long, specular As Long, tu As Single, tv As Single) As TLVERTEX
CreateTLVertex.X = X
CreateTLVertex.Y = Y
CreateTLVertex.Z = Z
CreateTLVertex.rhw = rhw
CreateTLVertex.color = color
CreateTLVertex.specular = specular
CreateTLVertex.tu = tu
CreateTLVertex.tv = tv
End Function
نکته: شما می توانید مقادیر اعشاری Floating Point را برای مختصاتهای x و y و z بکار ببرید، اما Direct3D مختصاتها را با گردکردن آنها تخمین می زند و بنابراین ممکن است باعث ایجاد نتایج ناخواسته شود.
حال بایستی تابع Render را بنویسیم:
کد:
کد:
Public Sub Render()
D3DDevice.Clear 0, ByVal 0, D3DCLEAR_TARGET, 0, 1#, 0
D3DDevice.BeginScene
D3DDevice.DrawPrimitiveUP D3DPT_TRIANGLESTRIP, 2, TriStrip(0), Len(TriStrip(0))
D3DDevice.EndScene
D3DDevice.Present ByVal 0, ByVal 0, 0, ByVal 0
End Sub
ساختار اصلی برای اجرای توابع فوق بصورت زیر است:
کد:
کد:
Initialize
Do While YourEvent = True
Render
DoEvents
Loop