vb.netd3d Vb Net

VB.net可以開發(fā)小型3D圖形顯示軟件嗎?

可以借助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

關于 vb.net 引用directx的問題

.net 的WPF工程,用的就是directX,根本無需使用directx sdk。。。 而且WPF 非常方便比directX sdk好用,10倍以上,主要是簡單。。。用.net還要去用directX sdk,本來就是個很不明智的事,因為WPF把directX封裝的非常完美。。。

VB.NET設置屏幕分辨率、顏色位數(shù)、刷新率 實例代碼

這篇文章介紹了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

vb.net中怎么調用DirectX來播放視頻

使用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控件默認將會自動播放文件。

VB.net怎么進行實時的3D曲面繪圖

這份文件列出了參數(shù)在PowerMILL提供。 表1 列出一般PowerMILL參數(shù), 表2 列出了有效的PowerMILL安裝額外的參數(shù)表。 表1。 PowerMILL參數(shù)。 標識符說明 (AdditionalStock)最大厚度的股票估計要去除刀具路徑。這是用來作為一種輔助手

使用vb如何調用D3dHook.dll把游戲窗口化

這個是個簡單的程序界面,以俠盜獵車手為例,演示一下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)

成都做網站