下面是一个例子
Imports Microsoft.DirectX Imports Microsoft.DirectX.Direct3D
Public Class Form1 Inherits System.Windows.Forms.Form
#Region " Windows 窗体设计器生成的代码 "
Public Sub New() MyBase.New()
'该调用是 Windows 窗体设计器所必需的。 InitializeComponent()
'在 InitializeComponent() 调用之后添加任何初始化
End Sub
'窗体重写 dispose 以清理组件列表。 Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean) If disposing Then If Not (components Is Nothing) Then components.Dispose() End If End If MyBase.Dispose(disposing) End Sub
'Windows 窗体设计器所必需的 Private components As System.ComponentModel.IContainer
'注意: 以下过程是 Windows 窗体设计器所必需的 '可以使用 Windows 窗体设计器修改此过程。 '不要使用代码编辑器修改它。 <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent() ' 'Form1 ' Me.AutoScaleBaseSize = New System.Drawing.Size(6, 14) Me.ClientSize = New System.Drawing.Size(292, 273) Me.Name = "Form1" Me.Text = "Form1"
End Sub
#End Region
Dim m_D3DDev As Microsoft.DirectX.Direct3D.Device ' 设备 Dim m_Sprite As Microsoft.DirectX.Direct3D.Sprite ' 精灵,这个接口对于显示2D图像和文字比较方便 Dim m_Font As Microsoft.DirectX.Direct3D.Font ' 文字 Dim m_Tex As Microsoft.DirectX.Direct3D.Texture ' 材质
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load '初始化D3D设备 Try
'PresentParameters设置一些设备参数,包括显示模式等等 Dim pp As New PresentParameters pp.Windowed = True '窗口模式 pp.SwapEffect = SwapEffect.Discard pp.EnableAutoDepthStencil = True pp.AutoDepthStencilFormat = DepthFormat.D16 '16位位深
'注意第4个参数是一个复合参数,通过Or连接控制一些选项 m_D3DDev = New Device(Nothing, DeviceType.Hardware, Me, CreateFlags.SoftwareVertexProcessing, pp) If m_D3DDev Is Nothing Then MsgBox("生成设备失败") End If
m_Sprite = New Sprite(m_D3DDev)
'这里我们简单生成了一个字体,关于System.Drawing.Font可以参考GDI+的一些文档 m_Font = New Font(m_D3DDev, New System.Drawing.Font("隶书", 14))
Dim ii As ImageInformation ii = TextureLoader.ImageInformationFromFile("\rc\btn.png")
'&HFF00FF00过虑颜色 m_Tex = TextureLoader.FromFile(m_D3DDev, "\rc\btn.png", _ ii.Width, ii.Height, 1, Usage.None, Format.Unknown, Pool.Default, Filter.None, Filter.None, &HFF00FF00) Catch ex As Exception MsgBox(ex.ToString()) End Try End Sub
Public Sub Render() If m_D3DDev Is Nothing Then Exit Sub
m_D3DDev.Clear(ClearFlags.ZBuffer Or ClearFlags.Target, System.Drawing.Color.FromArgb(255, 0, 0, 128), 0.0, 0.0) m_D3DDev.BeginScene()
m_D3DDev.SetRenderState(RenderStates.ZEnable, True) m_D3DDev.SetRenderState(RenderStates.CullMode, Cull.None) m_D3DDev.SetRenderState(RenderStates.Lighting, False)
'设置alpha-blend m_D3DDev.SetRenderState(RenderStates.AlphaBlendEnable, True) m_D3DDev.SetRenderState(RenderStates.SourceBlend, Blend.SourceAlpha) m_D3DDev.SetRenderState(RenderStates.DestinationBlend, Blend.InvSourceAlpha) m_D3DDev.SetRenderState(RenderStates.AlphaTestEnable, False)
'如果是2D和3D混合,要分开渲染 m_Sprite.Begin(SpriteFlags.None)
'&H80FFFFFF是对象绘制的颜色 m_Sprite.Draw2D(m_Tex, New Point(0, 0), 0.0, New Point(20, 40), &H80FFFFFF)
m_Sprite.End()
m_Font.DrawText(Nothing, "这是一个VB.NET测试", 10, 10, System.Drawing.Color.White)
m_D3DDev.EndScene()
m_D3DDev.Present() End Sub
Private Sub Form1_Closed(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Closed Me.Dispose() End Sub End Class
Public Class CMain
Shared a As Integer
Public Shared Sub Main(ByVal CmdArgs() As String) Dim frm1 As New Form1
frm1.Show()
While frm1.Created frm1.Render() Application.DoEvents() End While End Sub
End Class |