我不得不承认在VB上写DirectX的教程相当难找!如果LZ想深入研究三维图形问题,C++一定要学,就算不能用C++编程,起码要能把C++程序翻译成VB程序.
我自己学会DX编程花了两三个月(很浅).编这样一个程序难度是有点大的.
这是我的一个老DX程序的不完全的代码(显示一个黑乎乎的平面),不一定能编译,可以参考一下.
Imports Microsoft.DirectX '一定要~
Public Class FormMain
'Matrices
Dim matWorld, matView, matProj As Matrix '世界位置矩阵,摄像机位置矩阵和透视矩阵,数学要学好啊.
'mesh
#Region "DX Core"
Public Sub InitDeviceObjects()
.Windowed = True '不全屏.
.EnableAutoDepthStencil = True '让DX自动管理深度缓冲
End With
End Sub
Public Sub RestoreDeviceObjects()
AttrTable(0).AttributeId = 0
AttrTable(0).FaceStart = 0
AttrTable(0).VertexStart = 0
'顶点坐标信息.
MyPlane.SetAttributeTable(AttrTable) '输入顶点分组属性表
Public Sub Render() '调用它画图
MatView = Matrix.LookAtLH(vPos, vlook, vUp) '计算摄像机位置矩阵
Dim fAspect As Single = Me.Width / Me.Height '窗口长宽比
MyDevice.BeginScene() '开始画
MatWorld = Matrix.Identity '物体位于原点,不旋转
Me.Mesh.DrawSubset(0) '画物体
MyDevice.EndScene() '结束
MyDevice.Present() '显示在屏幕上
Public Sub DeleteDeviceObjects() '结束程序时放掉资源
MyPlane.Dispose()
MyDevice.Dispose()
#End Region
Private Sub FormMain_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
DeleteDeviceObjects()
Windows.Forms.Cursor.Show()
Private Sub FormMain_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
InitDeviceObjects()
RestoreDeviceObjects()
Windows.Forms.Cursor.Hide()
Render()
End Class
Dim BmpData As New BitmapData
Dim PixleValue(Stride * Bmp.Height) As Byte
Dim Hanlde As GCHandle = GCHandle.Alloc(PixleValue, GCHandleType.Pinned)
BmpData.Scan0 = Hanlde.AddrOfPinnedObject()
数学上不是有斜二测画法,算好坐标即可画出
或者用AnyCAD的.Net图形控件
也可以调用matlab 实现
以上就是土嘎嘎小编为大家整理的vb.net开发三维图相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!