It would be very rare to have a game with no writing in it. So, we need to have some way to display some forms text. First, we'll do some built-in Direct3D text exhibits. We declare a Direct3D.Font object:
    Dim DisplayFont As Direct3D.Font
This is initialized like so:
        DisplayFont = New Direct3D.Font(D9, Me.Font)
And used like this:
        DisplayFont.Begin()
        DisplayFont.DrawText("Press Esc to End", Me.ClientRectangle, DrawTextFormat.Bottom, &H80FFFFFF)
        DisplayFont.End()
Do not forget to have ZBufferWriteEnabled set to False (disabled) while you are drawing text.
Of course, you have the ability to use custom fonts to add your own personal style rather than using a regular Windows font. To do this, we set up a texture with a bunch of letters and with transparency.
    Dim CustomFont As Texture, CusText As String
    Dim TextBfr As VertexBuffer
    Dim Textspots() As CustomVertex.TransformedColoredTextured
The text is set to whatever it needs to be, and then the SetupFonts routine is called to setup a vertex buffer containing a bunch of TransformedColoredTextured vertices that, when drawn, will be a pretty rendering of the text that we wanted to see.
    Private Sub SetupFonts(ByVal vs() As CustomVertex.TransformedColoredTextured, ByVal vxbf As VertexBuffer, ByVal D9 As Device)
        DisplayFont = New Direct3D.Font(D9, Me.Font)
        Dim LV, Ctr As Integer
        Dim dL As Single = 16.0F
        Dim dR As Single = 1 / 8.0F, dC As Single = 1 / 16.0F


        Dim ChrNum, ChrRow, ChrCol As Integer

        Dim A As Array = vxbf.Lock(0, LockFlags.None)
        vs = DirectCast(A, CustomVertex.TransformedColoredTextured())

        For LV = 0 To Math.Min(31, Custext.Length - 1)
            ChrNum = Convert.ToInt32(Custext.Chars(LV))
            ChrRow = ChrNum \ 16
            ChrCol = ChrNum Mod 16
            vs(6 * LV) = New CustomVertex.TransformedColoredTextured(dL * LV, 0.0F, 0.0F, 1.0F, &HFFFF0000, ChrCol / 16.0F, ChrRow / 8.0F)
            vs(6 * LV + 1) = New CustomVertex.TransformedColoredTextured(dL * (LV + 1), 0.0F, 0.0F, 1.0F, &HFFFFFF00, ChrCol / 16.0F + dC, ChrRow / 8.0F)
            vs(6 * LV + 2) = New CustomVertex.TransformedColoredTextured(dL * LV, dL, 0.0F, 1.0F, &HFFFF00FF, ChrCol / 16.0F, ChrRow / 8.0F + dR)
            vs(6 * LV + 3) = New CustomVertex.TransformedColoredTextured(dL * (LV + 1), dL, 0.0F, 1.0F, &HFFFFFFFF, ChrCol / 16.0F + dC, ChrRow / 8.0F + dR)
            vs(6 * LV + 4) = vs(6 * LV + 2)
            vs(6 * LV + 5) = vs(6 * LV + 1)
        Next

        vxbf.Unlock()

    End Sub
The call looks like this:
            Me.SetupFonts(Textspots, TextBfr, D9)
            'Setup the displayfont, the DirectX Font that supposedly will draw text for us.
The font texture is done in the texture setup area:
        Customfont = TextureLoader.FromFile(D9, Application.StartupPath & "\gfont4.bmp", 256, 128, 0, 0, Format.A8B8G8R8, Pool.Managed, Filter.Linear, Filter.Linear, &HFFFF00FF)

.vb file