簡單的 3D 場景是幾何數據的三維圖形表示。在本文中,我們將學習如何使用 C# 從頭開始創建 3D 場景,而無需安裝任何 3D 建模或渲染軟件。我們將以 FBX 文件格式保存 3D 場景,這是一種用於交換 3D 格式的流行 3D 文件格式。 FBX 可以作為二進製或 ASCII 數據文件保存在磁盤上。
本文應涵蓋以下主題:
用於創建 3D 場景的 C# API - 免費下載
要創建和讀取 3D 場景,我們將使用 Aspose.3D for .NET API。它允許以 支持的格式 創建和保存 3D 場景。它還支持處理幾何和場景層次結構、場景中的動畫對像以及 3D 文件格式的轉換。
API 提供了 Scene 類,這是一個頂級對象,包含節點、幾何體、材質、紋理、動畫、姿勢、子場景等。 CreateChildNode(Entity) 方法創建一個附加了給定實體的新子節點。 API 為 LambertMaterial、PhongMaterial 和 ShaderMaterial 提供著色模型。燈光照亮場景,API 的 Light 類可以為場景添加一些燈光。
請 下載 API 的 DLL 或使用 NuGet 安裝它。
PM> Install-Package Aspose.3D
在 C# 中創建一個簡單的 3D 場景
我們可以按照以下步驟創建一個簡單的 3D 場景:
- 創建場景類的實例。
- 調用 CreateChildNode() 方法來添加一些幾何圖形,即顯示在屏幕上的形狀,例如圓柱體。
- 設置子節點屬性,例如 Material。
- 初始化一個 Light 類對象。
- 調用 CreateChildNode() 方法添加 Light 實體。
- 最後,使用 Save() 方法將場景保存為 FBX。它以輸出文件路徑和 FileFormat.FBX7500ASCII 作為參數。
以下代碼示例展示瞭如何使用 C# 創建一個簡單的 3D 場景。
// 此代碼示例演示如何在 FBX 文件中創建簡單的 3D 場景。
// 初始化 3D 場景
var scene = new Scene();
// 初始化圓柱對象
var cylinder = new Cylinder();
cylinder.Name = "Cylinder";
// 創建子節點並添加Cylinder對象
var node = scene.RootNode.CreateChildNode(cylinder);
// 設置子節點屬性
var material = new LambertMaterial() { DiffuseColor = new Vector3(Color.LightBlue) };
material.Name = "Lambert";
node.Material = material;
// 添加燈光實體
var light = new Light() { LightType = LightType.Point };
light.Name = "Light";
scene.RootNode.CreateChildNode(light).Transform.Translation = new Vector3(10, 0, 10);
// 輸出文件路徑
var output = @"C:\Files\3D\document.fbx";
// 保存 3D 場景文件
scene.Save(output, FileFormat.FBX7500ASCII);
使用 C# 讀取 3D 場景
我們可以按照以下步驟從 FBX 文檔中讀取 3D 場景:
- 創建場景類的實例。
- 使用 Open() 方法加載現有的 3D 文檔。
- 遍歷 ChildNodes 屬性
- 最後,顯示屬性值。
以下代碼示例展示瞭如何使用 C# 加載和讀取 3D 場景。
// 此代碼示例演示如何從 FBX 文件讀取 3D 場景
// 初始化一個場景類對象
Scene scene = new Scene();
// 加載現有的 3D 文檔
scene.Open(@"C:\Files\3D\document.fbx");
foreach(var node in scene.RootNode.ChildNodes)
{
var entity = node.Entity;
Console.WriteLine("{0}", entity.Name);
if (node.Material != null)
{
Material material = node.Material;
Console.WriteLine("{0}", material.Name);
PropertyCollection props = material.Properties;
//使用 foreach 列出所有屬性
foreach (var prop in props)
{
Console.WriteLine("{0} = {1}", prop.Name, prop.Value);
}
//或使用序號 for 循環
for (int i = 0; i < props.Count; i++)
{
var prop = props[i];
Console.WriteLine("{0} = {1}", prop.Name, prop.Value);
}
}
}
獲得免費的臨時許可證
您可以獲得免費的臨時許可證 試用 Aspose.3D for .NET,沒有評估限制。
結論
在本文中,我們學習瞭如何:
- 以編程方式創建 3D 場景;
- 向 3D 場景添加對象/實體,例如圓柱體、材質、光線等;
- 在 C# 中讀取 3D 場景子註釋和屬性。
此外,您可以使用文檔了解更多關於 Aspose.3D for .NET API 的信息。如有任何疑問,請隨時在我們的 論壇 上與我們聯繫。