簡體   English   中英

在C#托管DirectX中制作自定義網格

[英]Making a custom mesh in C# managed DirectX

我需要在運行時使用來自C#的Managed DirectX制作DirectX 3D網格。 我無法找到有關如何執行此操作的任何信息。

  1. 不,我不能使用3D建模器程序制作對象。 它們的尺寸和形狀必須精確,在運行時,我沒有任何尺寸或形狀信息。
  2. 不,我無法從現有DirectX網格功能構建模型。 (一個簡單的示例:DirectX允許您使用圓錐形網格和圓柱網格輕松地為鉛筆建模。當然,您必須為鉛筆攜帶兩個網格,而不僅僅是一個網格,並正確定位和定向每個網格。但是,您必須由於沒有提供半圓柱體或半圓錐網格,甚至無法制作鉛筆模型,將其縱向分成兩半。)
  3. 在運行時,我已經計算了所有頂點,並且知道要連接哪些頂點才能形成必要的三角形。
  4. 我需要的只是純色。 我不需要紋理貼圖。

使用此DirectX調用可以得到球體的網格:
Mesh sphere = Mesh.Sphere(device, sphereRadius, sphereSlices, sphereStacks);
該網格是在運行時構建的。

我需要知道的是如何進行類似的功能:
Mesh shape = MakeCustomMesh(device, vertexlist, trianglelist);
其中兩個列表可以是任何合適的容器/格式。

如果有人可以將我指向托管DirectX(C#)示例代碼,即使它只是從3個硬編碼三角形構建網格,那也將是一個很大的好處。

有一些示例代碼顯示了如何在MDXInfo上執行此操作 這將創建具有多個子集的網格-如果您不需要它,則更加簡單。

基本上,您只需創建網格:

Mesh mesh = new Mesh(numIndices, numVerticess, MeshFlags.Managed, CustomVertex.PositionColored.Format /* you'll need to set this */ , device); 

然后,您可以抓取網格頂點緩沖區和索引緩沖區,並使用以下方法覆蓋它們:

IndexBuffer indices = mesh.IndexBuffer;
VertexBuffer vertices = mesh.VertexBuffer;

然后,適當地填充索引和頂點。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM