Dim Billboard As VertexBuffer |
Billboard = New VertexBuffer(GetType(CustomVertex.PositionColoredTextured), 4, D9, Usage.WriteOnly, CustomVertex.PositionColoredTextured.Format, Pool.Managed) |
'*************************** Drawing Bit Billboard ****************************************
SetupBillboard(Billboard, D9)
D9.Transform.World = Mx
D9.Material = Luminous
D9.SetStreamSource(0, Billboard, 0)
D9.VertexFormat = CustomVertex.PositionColoredTextured.Format
D9.SetTexture(0, Bitmech)
D9.DrawPrimitives(PrimitiveType.TriangleStrip, 0, 2)
D9.Transform.World = Matrix.Identity |
Bitmech = TextureLoader.FromFile(D9, Application.StartupPath & "\bit.bmp", 32, 32, 0, 0, Format.A8B8G8R8, Pool.Managed, Filter.Linear, Filter.Linear, &HFF00FF00) |
Luminous = Wallpaper
Luminous.Emissive = Color.LightGoldenrodYellow
|
Public Function GetDistance(ByVal V1 As Vector3, ByVal V2 As Vector3) As Single
Return Vector3.Subtract(V2, V1).Length
End Function |
Private Sub SetupBillboard(ByVal vxbf As VertexBuffer, ByVal D9 As Device)
Dim vs() As CustomVertex.PositionColoredTextured
Dim N As Single = 3.0F
Dim A As Array = vxbf.Lock(0, LockFlags.None)
Const BBX As Single = 40.0F, BBY As Single = 40.0F, BBZ As Single = 3.0F
'It returns a vanilla array...
vs = DirectCast(A, CustomVertex.PositionColoredTextured())
vs(0) = New CustomVertex.PositionColoredTextured(0.0F, -N, 2.0F * N, &HFFFFFFFF, 0.0F, 0.0F)
vs(1) = New CustomVertex.PositionColoredTextured(0.0F, N, 2.0F * N, &HFFFFFFFF, 1.0F, 0.0F)
vs(2) = New CustomVertex.PositionColoredTextured(0.0F, -N, 0.0F, &HFFFFFFFF, 0.0F, 1.0F)
vs(3) = New CustomVertex.PositionColoredTextured(0.0F, N, 0.0F, &HFFFFFFFF, 1.0F, 1.0F)
Mx = Matrix.Identity
Mx.Multiply(Matrix.RotationY(Convert.ToSingle(Math.Asin(BBZ / GetDistance(New Vector3(BBX, BBY, BBZ), Camera)))))
Mx.Multiply(Matrix.RotationZ(Convert.ToSingle(Math.Atan2(Camera.Y - BBY, Camera.X - BBX))))
Mx.Multiply(Matrix.Translation(BBX, BBY, BBZ))
vxbf.Unlock()
End Sub |