1. <ul id="0c1fb"></ul>

      <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
      <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区

      RELATEED CONSULTING
      相關(guān)咨詢
      選擇下列產(chǎn)品馬上在線溝通
      服務(wù)時(shí)間:8:30-17:00
      你可能遇到了下面的問(wèn)題
      關(guān)閉右側(cè)工具欄

      新聞中心

      這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷(xiāo)解決方案
      vbnet做3D圖像 vbnet繪圖

      怎么利用VB.NET實(shí)現(xiàn)三維繪圖

      數(shù)學(xué)上不是有斜二測(cè)畫(huà)法,算好坐標(biāo)即可畫(huà)出

      創(chuàng)新互聯(lián)公司主營(yíng)淶水網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營(yíng)網(wǎng)站建設(shè)方案,重慶APP開(kāi)發(fā),淶水h5重慶小程序開(kāi)發(fā)公司搭建,淶水網(wǎng)站營(yíng)銷(xiāo)推廣歡迎淶水等地區(qū)企業(yè)咨詢

      或者用AnyCAD的.Net圖形控件

      也可以調(diào)用matlab 實(shí)現(xiàn)

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

      可以借助DirectX來(lái)編程。免費(fèi)3D引擎可不好找,一般來(lái)說(shuō)速度比不上硬件加速后的DX,尤其令人頭疼的是一般都沒(méi)有針對(duì)VB的文檔,LZ有這方面理想的話,自己寫(xiě)一個(gè)吧……

      我不得不承認(rèn)在VB上寫(xiě)DirectX的教程相當(dāng)難找!如果LZ想深入研究三維圖形問(wèn)題,C++一定要學(xué),就算不能用C++編程,起碼要能把C++程序翻譯成VB程序。

      我自己學(xué)會(huì)DX編程花了兩三個(gè)月(很淺)。編這樣一個(gè)程序難度是有點(diǎn)大的。

      工具:DirectX9和其針對(duì)VB的庫(kù)(項(xiàng)目-添加引用。.NET庫(kù)里DX庫(kù)一般都有),VB不知道現(xiàn)在支不支持DX10以上的版本,不過(guò)9絕對(duì)夠用了。

      思路:一切3D圖形都是由三角形拼成的。矩形挖掉一個(gè)圓孔可不是一個(gè)方便畫(huà)的圖形,我估計(jì)至少得有24個(gè)三角形。你需要記錄這些點(diǎn)的坐標(biāo),或者干脆把它們寫(xiě)在文件里,到時(shí)讀出來(lái)。

      這是我的一個(gè)老DX程序的不完全的代碼(顯示一個(gè)黑乎乎的平面),不一定能編譯,可以參考一下。

      Imports Microsoft.DirectX '一定要~

      Public Class FormMain

      'Direct3D Startup

      Dim d3dpp As New Direct3D.PresentParameters 'DX基本參數(shù),例如全屏還是窗口等

      Public MyDevice As Direct3D.Device ‘DX基本設(shè)備,畫(huà)圖就靠它。

      'Matrices

      Dim matWorld, matView, matProj As Matrix '世界位置矩陣,攝像機(jī)位置矩陣和透視矩陣,數(shù)學(xué)要學(xué)好啊。

      'mesh

      Public MyPlane as Direct3D.Mesh ’我們的物體

      Public VBPlane(3) As Direct3D.CustomVertex.PositionNormalTextured '存放頂點(diǎn)位置的數(shù)組

      #Region "DX Core"

      Public Sub InitDeviceObjects()

      With d3dpp ‘以下請(qǐng)照抄。

      .Windowed = True ‘不全屏。

      .SwapEffect = Direct3D.SwapEffect.Discard ’雙緩沖交換效果。請(qǐng)百度“雙緩沖”

      .BackBufferFormat = Direct3D.Format.Unknown

      .EnableAutoDepthStencil = True ’讓DX自動(dòng)管理深度緩沖

      .AutoDepthStencilFormat = Direct3D.DepthFormat.D16

      End With

      MyDevice = New Direct3D.Device(0, Direct3D.DeviceType.Hardware, Me.Handle, Direct3D.CreateFlags.HardwareVertexProcessing, d3dpp) '創(chuàng)建DX設(shè)備啦!以下兩句請(qǐng)照抄。

      MyDevice.SetRenderState(Direct3D.RenderStates.ZEnable, True) ‘Z緩沖

      MyDevice.SetRenderState(Direct3D.RenderStates.NormalizeNormals, True)'法線歸一化,請(qǐng)看相關(guān)數(shù)學(xué)書(shū)籍。

      End Sub

      Public Sub RestoreDeviceObjects()

      Dim PlaneIB() As Short = {0, 1, 3, 0, 2, 3} ’頂點(diǎn)索引信息。

      Dim AttrTable(1) As Direct3D.AttributeRange ‘頂點(diǎn)分組屬性表

      AttrTable(0).AttributeId = 0

      AttrTable(0).FaceStart = 0

      AttrTable(0).FaceCount = 2 ’有兩個(gè)三角形

      AttrTable(0).VertexStart = 0

      AttrTable(0).VertexCount = 4 ‘四個(gè)點(diǎn)

      ‘頂點(diǎn)坐標(biāo)信息。

      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) ‘輸入頂點(diǎn)坐標(biāo)數(shù)據(jù)

      MyPlane.SetIndexBufferData(PlaneIB, Direct3D.LockFlags.None) ‘輸入索引數(shù)據(jù)

      MyPlane.SetAttributeTable(AttrTable) ‘輸入頂點(diǎn)分組屬性表

      End Sub

      Public Sub Render() ‘調(diào)用它畫(huà)圖

      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) ‘計(jì)算攝像機(jī)位置矩陣

      Device.SetTransform(Direct3D.TransformType.View, MatView) ‘設(shè)置當(dāng)前攝像機(jī)位置矩陣為MatView。

      Dim fAspect As Single = Me.Width / Me.Height ’窗口長(zhǎng)寬比

      matProj = Matrix.PerspectiveFovLH(Math.PI / 4, fAspect, 1.0F, 10001) ‘計(jì)算透視矩陣MatProj。

      MyDevice.SetTransform(Direct3D.TransformType.Projection, matProj) ‘設(shè)置當(dāng)前透視矩陣為MatProj。

      MyDevice.Clear(Direct3D.ClearFlags.Target + Direct3D.ClearFlags.ZBuffer, Color.Blue, 1.0F, 0) ’先刷藍(lán)屏

      MyDevice.BeginScene() ‘開(kāi)始畫(huà)

      MatWorld = Matrix.Identity ’物體位于原點(diǎn),不旋轉(zhuǎn)

      Device.SetTransform(Direct3D.TransformType.World, MatWorld) ’設(shè)置物體位置

      Me.Mesh.DrawSubset(0) ‘畫(huà)物體

      MyDevice.EndScene() ’結(jié)束

      MyDevice.Present() ‘顯示在屏幕上

      End Sub

      Public Sub DeleteDeviceObjects() ’結(jié)束程序時(shí)放掉資源

      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環(huán)境下圖像處理,用什么建立3D

      首先,還是談?wù)剤D像像素時(shí)數(shù)據(jù)獲取方面吧,.net中的圖像相關(guān)類(lèi)基本上都是基于GDI+的,因此,圖像數(shù)據(jù)的獲取其實(shí)也是調(diào)用GDI+的一些函數(shù)。這個(gè)函數(shù)就是LockBits,在vb.net中彩色圖像數(shù)據(jù)的快速獲取 一文中,我們是調(diào)用了Marshal.Copy把LockBits鎖定的內(nèi)存數(shù)據(jù)拷貝到數(shù)據(jù)中,然后對(duì)數(shù)組中的值進(jìn)行處理。這樣做主要的原因是VB.NET不好直接訪問(wèn)內(nèi)存(Marshal.ReadByte之類(lèi)的函數(shù)不適合用于大型的循環(huán)中)。那么,這就造成了2個(gè)不好的事情,第一:在同一時(shí)間需要2倍于圖像數(shù)據(jù)量的內(nèi)存,第二:內(nèi)存數(shù)據(jù)拷貝到數(shù)據(jù),以及處理后再把數(shù)組的數(shù)據(jù)拷貝會(huì)內(nèi)存中都是會(huì)減低速度的。作為一種改進(jìn),我們應(yīng)該充分利用LockBits的功能。LockBits中的LockMode中有一種模式為ImageLockMode.UserInputBuffer,該模式下需要用戶先申請(qǐng)內(nèi)存,然后在把圖像數(shù)據(jù)按照相關(guān)格式填充如這個(gè)內(nèi)存中。這樣,就可以先定義個(gè)數(shù)組,然后把圖像數(shù)據(jù)填充到這個(gè)數(shù)組中,就避免了來(lái)回拷貝的耗時(shí)了,簡(jiǎn)單示例代碼如下:

      Dim BmpData As New BitmapData

      Stride = ((Bmp.Width * 3 + 3) And HFFFFFFFC)

      Dim PixleValue(Stride * Bmp.Height) As Byte

      Dim Hanlde As GCHandle = GCHandle.Alloc(PixleValue, GCHandleType.Pinned)

      BmpData.Scan0 = Hanlde.AddrOfPinnedObject()


      本文題目:vbnet做3D圖像 vbnet繪圖
      URL網(wǎng)址:http://ef60e0e.cn/article/dogseee.html
      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区
      1. <ul id="0c1fb"></ul>

        <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
        <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

        蓬莱市| 宿迁市| 通辽市| 阿瓦提县| 乐山市| 岳普湖县| 普兰店市| 曲阜市| 扶风县| 大石桥市| 金坛市| 铜山县| 美姑县| 青冈县| 晋江市| 安陆市| 长白| 九龙坡区| 富民县| 普安县| 天峨县| 弥勒县| 广汉市| 景宁| 垣曲县| 邯郸市| 威宁| 大同市| 苏尼特右旗| 七台河市| 神木县| 抚州市| 淮阳县| 尉氏县| 芷江| 石门县| 华宁县| 台州市| 恩施市| 吴川市| 都昌县|