可以借助DirectX來編程。免費3D引擎可不好找,一般來說速度比不上硬件加速后的DX,尤其令人頭疼的是一般都沒有針對VB的文檔,LZ有這方面理想的話,自己寫一個吧……
創(chuàng)新互聯(lián)是一家專業(yè)提供江蘇企業(yè)網站建設,專注與網站制作、做網站、H5建站、小程序制作等業(yè)務。10年已為江蘇眾多企業(yè)、政府機構等服務。創(chuàng)新互聯(lián)專業(yè)網站制作公司優(yōu)惠進行中。
我不得不承認在VB上寫DirectX的教程相當難找!如果LZ想深入研究三維圖形問題,C++一定要學,就算不能用C++編程,起碼要能把C++程序翻譯成VB程序。
我自己學會DX編程花了兩三個月(很淺)。編這樣一個程序難度是有點大的。
工具:DirectX9和其針對VB的庫(項目-添加引用。.NET庫里DX庫一般都有),VB不知道現(xiàn)在支不支持DX10以上的版本,不過9絕對夠用了。
思路:一切3D圖形都是由三角形拼成的。矩形挖掉一個圓孔可不是一個方便畫的圖形,我估計至少得有24個三角形。你需要記錄這些點的坐標,或者干脆把它們寫在文件里,到時讀出來。
這是我的一個老DX程序的不完全的代碼(顯示一個黑乎乎的平面),不一定能編譯,可以參考一下。
Imports Microsoft.DirectX '一定要~
Public Class FormMain
'Direct3D Startup
Dim d3dpp As New Direct3D.PresentParameters 'DX基本參數(shù),例如全屏還是窗口等
Public MyDevice As Direct3D.Device ‘DX基本設備,畫圖就靠它。
'Matrices
Dim matWorld, matView, matProj As Matrix '世界位置矩陣,攝像機位置矩陣和透視矩陣,數(shù)學要學好啊。
'mesh
Public MyPlane as Direct3D.Mesh ’我們的物體
Public VBPlane(3) As Direct3D.CustomVertex.PositionNormalTextured '存放頂點位置的數(shù)組
#Region "DX Core"
Public Sub InitDeviceObjects()
With d3dpp ‘以下請照抄。
.Windowed = True ‘不全屏。
.SwapEffect = Direct3D.SwapEffect.Discard ’雙緩沖交換效果。請百度“雙緩沖”
.BackBufferFormat = Direct3D.Format.Unknown
.EnableAutoDepthStencil = True ’讓DX自動管理深度緩沖
.AutoDepthStencilFormat = Direct3D.DepthFormat.D16
End With
MyDevice = New Direct3D.Device(0, Direct3D.DeviceType.Hardware, Me.Handle, Direct3D.CreateFlags.HardwareVertexProcessing, d3dpp) '創(chuàng)建DX設備啦!以下兩句請照抄。
MyDevice.SetRenderState(Direct3D.RenderStates.ZEnable, True) ‘Z緩沖
MyDevice.SetRenderState(Direct3D.RenderStates.NormalizeNormals, True)'法線歸一化,請看相關數(shù)學書籍。
End Sub
Public Sub RestoreDeviceObjects()
Dim PlaneIB() As Short = {0, 1, 3, 0, 2, 3} ’頂點索引信息。
Dim AttrTable(1) As Direct3D.AttributeRange ‘頂點分組屬性表
AttrTable(0).AttributeId = 0
AttrTable(0).FaceStart = 0
AttrTable(0).FaceCount = 2 ’有兩個三角形
AttrTable(0).VertexStart = 0
AttrTable(0).VertexCount = 4 ‘四個點
‘頂點坐標信息。
VBPlane(0) = New Direct3D.CustomVertex.PositionNormalTextured(-500, -500, 0, 0, 0, 1, 0, 0)
VBPlane(1) = New Direct3D.CustomVertex.PositionNormalTextured(500, -500, 0, 0, 0, 1, 1, 0)
VBPlane(2) = New Direct3D.CustomVertex.PositionNormalTextured(-500, 500, 0, 0, 0, 1, 0, 1)
VBPlane(3) = New Direct3D.CustomVertex.PositionNormalTextured(500, 500, 0, 0, 0, 1, 1, 1)
MyPlane = New Direct3D.Mesh(2, 4, Direct3D.MeshFlags.Managed, Direct3D.VertexFormats.Position + Direct3D.VertexFormats.Normal + Direct3D.VertexFormats.Texture1, MyDevice) ’創(chuàng)建物體
MyPlane.SetVertexBufferData(VBPlane, Direct3D.LockFlags.None) ‘輸入頂點坐標數(shù)據
MyPlane.SetIndexBufferData(PlaneIB, Direct3D.LockFlags.None) ‘輸入索引數(shù)據
MyPlane.SetAttributeTable(AttrTable) ‘輸入頂點分組屬性表
End Sub
Public Sub Render() ‘調用它畫圖
Dim vlook As New Vector3(1, 0, 0)
Dim vPos As New Vector3(0,0,0)
Dim vUp As New Vector3(0, 0, 1)
MatView = Matrix.LookAtLH(vPos, vlook, vUp) ‘計算攝像機位置矩陣
Device.SetTransform(Direct3D.TransformType.View, MatView) ‘設置當前攝像機位置矩陣為MatView。
Dim fAspect As Single = Me.Width / Me.Height ’窗口長寬比
matProj = Matrix.PerspectiveFovLH(Math.PI / 4, fAspect, 1.0F, 10001) ‘計算透視矩陣MatProj。
MyDevice.SetTransform(Direct3D.TransformType.Projection, matProj) ‘設置當前透視矩陣為MatProj。
MyDevice.Clear(Direct3D.ClearFlags.Target + Direct3D.ClearFlags.ZBuffer, Color.Blue, 1.0F, 0) ’先刷藍屏
MyDevice.BeginScene() ‘開始畫
MatWorld = Matrix.Identity ’物體位于原點,不旋轉
Device.SetTransform(Direct3D.TransformType.World, MatWorld) ’設置物體位置
Me.Mesh.DrawSubset(0) ‘畫物體
MyDevice.EndScene() ’結束
MyDevice.Present() ‘顯示在屏幕上
End Sub
Public Sub DeleteDeviceObjects() ’結束程序時放掉資源
MyPlane.Dispose()
MyDevice.Dispose()
End Sub
#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()
End Sub
Private Sub FormMain_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
InitDeviceObjects()
RestoreDeviceObjects()
Windows.Forms.Cursor.Hide()
Render()
End Sub
End Class
.net 的WPF工程,用的就是directX,根本無需使用directx sdk。。。 而且WPF 非常方便比directX sdk好用,10倍以上,主要是簡單。。。用.net還要去用directX sdk,本來就是個很不明智的事,因為WPF把directX封裝的非常完美。。。
這篇文章介紹了VB.NET設置屏幕分辨率、顏色位數(shù)、刷新率
實例代碼,有需要的朋友可以參考一下
復制代碼
代碼如下:
Private
Declare
Function
GetDeviceCaps
Lib
"gdi32"
(ByVal
hdc
As
Long,
ByVal
nIndex
As
Long)
As
Long
Private
Declare
Function
ChangeDisplaySettings
Lib
"user32"
Alias
"ChangeDisplaySettingsA"
(lpDevMode
As
Any,
ByVal
dwflags
As
Long)
As
Long
Private
Const
CCDEVICENAME
As
Long
=
32
Private
Const
CCFORMNAME
As
Long
=
32
Private
Const
DM_BITSPERPEL
As
Long
=
H40000
Private
Const
DM_PELSWIDTH
As
Long
=
H80000
Private
Const
DM_PELSHEIGHT
As
Long
=
H100000
Private
Const
DM_DISPLAYFLAGS
As
Long
=
H200000
Private
Const
DM_DISPLAYFREQUENCY
=
H400000
Private
Const
CDS_FORCE
As
Long
=
H80000000
Private
Const
BITSPIXEL
As
Long
=
12
Private
Const
HORZRES
As
Long
=
8
Private
Const
VERTRES
As
Long
=
10
Private
Const
VREFRESH
=
116
Private
Type
DEVMODE
dmDeviceName
As
String
*
CCDEVICENAME
dmSpecVersion
As
Integer
dmDriverVersion
As
Integer
dmSize
As
Integer
dmDriverExtra
As
Integer
dmFields
As
Long
dmOrientation
As
Integer
dmPaperSize
As
Integer
dmPaperLength
As
Integer
dmPaperWidth
As
Integer
dmScale
As
Integer
dmCopies
As
Integer
dmDefaultSource
As
Integer
dmPrintQuality
As
Integer
dmColor
As
Integer
dmDuplex
As
Integer
dmYResolution
As
Integer
dmTTOption
As
Integer
dmCollate
As
Integer
dmFormName
As
String
*
CCFORMNAME
dmUnusedPadding
As
Integer
dmBitsPerPel
As
Integer
dmPelsWidth
As
Long
dmPelsHeight
As
Long
dmDisplayFlags
As
Long
dmDisplayFrequency
As
Long
End
Type
Private
Sub
cmdChangeDesktopMode_Click()
Dim
DM
As
DEVMODE
With
DM
.dmPelsWidth
=
CInt(txtNewWidth.Text)
.dmPelsHeight
=
CInt(txtNewHeight.Text)
.dmBitsPerPel
=
CInt(txtNewColor.Text)
.dmDisplayFrequency
=
CInt(txtNewFreq.Text)
.dmFields
=
DM_PELSWIDTH
Or
DM_PELSHEIGHT
Or
DM_BITSPERPEL
Or
DM_DISPLAYFREQUENCY
.dmSize
=
LenB(DM)
End
With
If
ChangeDisplaySettings(DM,
CDS_FORCE)
Then
MsgBox
"錯誤!不支持此模式!"
End
If
End
Sub
Private
Sub
Form_Load()
txtOldWidth.Text
=
GetDeviceCaps(Me.hdc,
HORZRES)
txtOldHeight.Text
=
GetDeviceCaps(Me.hdc,
VERTRES)
txtOldColor.Text
=
GetDeviceCaps(Me.hdc,
BITSPIXEL)
txtOldFreq.Text
=
GetDeviceCaps(Me.hdc,
VREFRESH)
End
Sub
使用Microsoft.DirectX.AudioVideoPlayback組件。
首先,需要安裝DirectX SDK.
DirectX 9.0c Redistributable
DirectX 9.0 SDK Update
然后將對Microsoft.DirectX.AudioVideoPlayback.dll的引用添加到你的項目。
使用這段代碼在Panel控件上放置一個視頻文件:
ImportsMicrosoft.DirectX.AudioVideoPlayback
Public Class Form1
Private Sub Form1_Load(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs) Handles MyBase.Load
Dim videoFile As Audio =New Audio("D:\Video1.avi")
videoFile.Owner = Panel1
videoFile.Play()
EndSub
EndClass
'以前收集的資料,沒用過,你自己整整
2)使用Windows Media Player控件也能播放視頻。
右擊工具箱-選項- COM組件-定位并添加“Windows Media Player” ActiveX控件
然后“Windows Media Player”控件將會出現(xiàn)在工具箱上。將它拖動到窗體上來生產一個AxWindowsMediaPlayer1對象,并為URL屬性指定音頻或者視頻文件。
AxWindowsMediaPlayer1.URL = "D:\VideoOrAudio.wmv"
Media Player控件默認將會自動播放文件。
這份文件列出了參數(shù)在PowerMILL提供。 表1 列出一般PowerMILL參數(shù), 表2 列出了有效的PowerMILL安裝額外的參數(shù)表。 表1。 PowerMILL參數(shù)。 標識符說明 (AdditionalStock)最大厚度的股票估計要去除刀具路徑。這是用來作為一種輔助手
這個是個簡單的程序界面,以俠盜獵車手為例,演示一下D3DWindower窗口化工具的使用方法!
運行窗口化工具,并點擊+符號選擇圣安地列斯的啟動文件(gta_sa.exe 漢化的用 gtasa_cn.exe)
在工具中右擊鼠標選擇導入的文件,設置參數(shù)比如窗口大小等,然后在輔助DLL位置選擇剛剛放到游戲目錄中的“D3dHook.dll”文件。設置完畢后點擊確定
選擇游戲,并且右擊藍色啟動標志即可窗口化運行游戲啦!
網站欄目:vb.netd3d Vb Net
URL網址:http://muchs.cn/article2/hphsoc.html
成都網站建設公司_創(chuàng)新互聯(lián),為您提供用戶體驗、網頁設計公司、網站策劃、網站營銷、網站設計公司、全網營銷推廣
聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)