vb.netd3d Vb Net

VB.net可以开发小型3D图形显示软件吗?

可以借助DirectX来编程。免费3D引擎可不好找,一般来说速度比不上硬件加速后的DX,尤其令人头疼的是一般都没有针对VB的文档,LZ有这方面理想的话,自己写一个吧……

创新互联是一家专业提供江苏企业网站建设,专注与网站制作、做网站H5建站、小程序制作等业务。10年已为江苏众多企业、政府机构等服务。创新互联专业网站制作公司优惠进行中。

我不得不承认在VB上写DirectX的教程相当难找!如果LZ想深入研究三维图形问题,C++一定要学,就算不能用C++编程,起码要能把C++程序翻译成VB程序。

我自己学会DX编程花了两三个月(很浅)。编这样一个程序难度是有点大的。

工具:DirectX9和其针对VB的库(项目-添加引用。.NET库里DX库一般都有),VB不知道现在支不支持DX10以上的版本,不过9绝对够用了。

思路:一切3D图形都是由三角形拼成的。矩形挖掉一个圆孔可不是一个方便画的图形,我估计至少得有24个三角形。你需要记录这些点的坐标,或者干脆把它们写在文件里,到时读出来。

这是我的一个老DX程序的不完全的代码(显示一个黑乎乎的平面),不一定能编译,可以参考一下。

Imports Microsoft.DirectX '一定要~

Public Class FormMain

'Direct3D Startup

Dim d3dpp As New Direct3D.PresentParameters 'DX基本参数,例如全屏还是窗口等

Public MyDevice As Direct3D.Device ‘DX基本设备,画图就靠它。

'Matrices

Dim matWorld, matView, matProj As Matrix '世界位置矩阵,摄像机位置矩阵和透视矩阵,数学要学好啊。

'mesh

Public MyPlane as Direct3D.Mesh ’我们的物体

Public VBPlane(3) As Direct3D.CustomVertex.PositionNormalTextured '存放顶点位置的数组

#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) '创建DX设备啦!以下两句请照抄。

MyDevice.SetRenderState(Direct3D.RenderStates.ZEnable, True) ‘Z缓冲

MyDevice.SetRenderState(Direct3D.RenderStates.NormalizeNormals, True)'法线归一化,请看相关数学书籍。

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) ’创建物体

MyPlane.SetVertexBufferData(VBPlane, Direct3D.LockFlags.None) ‘输入顶点坐标数据

MyPlane.SetIndexBufferData(PlaneIB, Direct3D.LockFlags.None) ‘输入索引数据

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设置屏幕分辨率、颜色位数、刷新率 实例代码

这篇文章介绍了VB.NET设置屏幕分辨率、颜色位数、刷新率

实例代码,有需要的朋友可以参考一下

复制代码

代码如下:

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”控件将会出现在工具箱上。将它拖动到窗体上来生产一个AxWindowsMediaPlayer1对象,并为URL属性指定音频或者视频文件。

AxWindowsMediaPlayer1.URL = "D:\VideoOrAudio.wmv"

Media Player控件默认将会自动播放文件。

VB.net怎么进行实时的3D曲面绘图

这份文件列出了参数在PowerMILL提供。 表1 列出一般PowerMILL参数, 表2 列出了有效的PowerMILL安装额外的参数表。 表1。 PowerMILL参数。 标识符说明 (AdditionalStock)最大厚度的股票估计要去除刀具路径。这是用来作为一种辅助手

使用vb如何调用D3dHook.dll把游戏窗口化

这个是个简单的程序界面,以侠盗猎车手为例,演示一下D3DWindower窗口化工具的使用方法!

运行窗口化工具,并点击+符号选择圣安地列斯的启动文件(gta_sa.exe 汉化的用 gtasa_cn.exe)

在工具中右击鼠标选择导入的文件,设置参数比如窗口大小等,然后在辅助DLL位置选择刚刚放到游戏目录中的“D3dHook.dll”文件。设置完毕后点击确定

选择游戏,并且右击蓝色启动标志即可窗口化运行游戏啦!


名称栏目:vb.netd3d Vb Net
转载注明:http://csdahua.cn/article/hphsoc.html
扫二维码与项目经理沟通

我们在微信上24小时期待你的声音

解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流