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上写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
vb里绘制线框的立体图形很简单,用到投影算法即可.
所谓投影算法就是把三维空间里的xyz映射成xy的一种方法,网上查一下"投影算法"关键字就能找到公式.
比如场景里有八个点,它们都各自有xyz坐标,在投影成xy以后,再按照一定顺序用Line连接线即可.再结合上Sin和Cos还能让图形旋转.但一般来说我们习惯的三维图像还涉及光、颜色、纹理填充,这就比较麻烦了.还得有消隐算法......
都说到这里了大家应该明白如果打算自己弄得化很复杂,想提高运算效率建议学习一下 DirectX SDK,有VB版的.
P( f ):(x, y, z)==( f*x / z + XOrigin, f*y / z + YOrigin )
二维坐标系公式.
二维笛卡儿坐标系的平移等式.
t( tx, ty ): ( x, y ) == ( x + tx, y + ty )
二维笛卡儿坐标系的缩放等式.
s( k ): ( x, y ) == ( kx, ky )
旋转等式:
r( q ): ( x, y ) == ( x cos(q) - y sin(q), x sin(q) + y cos(q) )
三维坐标系公式.
平移公式:
t( tx, ty, tz ): ( x, y, z ) == ( x + tx, y + ty, z + tz )
平移(tx, ty, tz)的矩阵
| 1 0 0 0 |
| 0 1 0 0 |
| 0 0 1 0 |
| tx ty tz 1 |
缩放公式:
s( k ): ( x, y, z ) == ( kx, ky, kz )
缩放(sx, sy, sz)的矩阵
| sx 0 0 0 |
| 0 sy 0 0 |
| 0 0 sz 0 |
| 0 0 0 1 |
旋转公式(围绕Z轴):
r( q ): ( x, y, z ) == ( x cos(q) - y sin(q), x sin(q) + y cos(q), z )
绕X轴旋转角q的矩阵
| 1 0 0 0 |
| 0 cos(q) sin(q) 0 |
| 0 -sin(q) cos(q) 0 |
| 0 0 0 1 |
绕Y轴旋转角q的矩阵:
| cos(q) 0 -sin(q) 0 |
| 0 1 0 0 |
| sin(q) 0 cos(q) 0 |
| 0 0 0 1 |
绕Z轴旋转角q的矩阵:
| cos(q) sin(q) 0 0 |
|-sin(q) cos(q) 0 0 |
| 0 0 1 0 |
| 0 0 0 1 |
以上就是土嘎嘎小编为大家整理的三维图形导入vb.net相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!