原創|產品更新|編輯:李顯亮|2020-04-10 11:17:53.140|閱讀 363 次
概述:Aspose.3D更新至最新版v20.4,添加Linux渲染支持 ,添加軌道運動控制,添加A3DW格式的線路支持,歡迎下載體驗。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
Aspose.3D for .NET是功能豐富的游戲軟件和計算機輔助設計(CAD)API,用于處理3D文檔格式,無需任何3D建模和渲染軟件依賴。同時支持Discreet3DS、WavefrontOBJ、FBX(ASCII,二進制)、STL(ASCII,二進制)、Universal3D、Collada、glTF、GLB、PLY、DirectX、Google Draco文件格式等。開發人員可以輕松地創建,閱讀,轉換,修改和控制3D文檔格式的內容。
近日,Aspose.3D迎來了2020年4月更新,新增Linux渲染支持 ,添加軌道運動控制,添加A3DW格式的線路支持,具體更新如下: >>點擊下載Aspose.3D v20.4
key | 概述 | 類別 |
---|---|---|
THREEDNET-663 | 添加Linux渲染支持 | 新功能 |
THREEDNET-661 | 使用自定義VertexDeclaration獲取數據 | 增強功能 |
THREEDNET-652 | 添加軌道運動控制 | 增強功能 |
THREEDNET-653 | 添加A3DW格式的線路支持。 | 增強功能 |
THREEDNET-655 | 添加TriMesh的渲染支持 | 增強功能 |
THREEDNET-656 | Web渲染器中的燈光渲染不正確 | Bug修復 |
用法示例:
Scene s = new Scene(@"test.stl"); var mesh = (Mesh)s.RootNode.ChildNodes[0].Entity; //create a VertexDeclaration so we can get the TriMesh with memory layout exactly we want. var vd = new VertexDeclaration(); var pos = vd.AddField(VertexFieldDataType.FVector3, VertexFieldSemantic.Position); var normal = vd.AddField(VertexFieldDataType.FVector3, VertexFieldSemantic.Normal); var uv = vd.AddField(VertexFieldDataType.FVector2, VertexFieldSemantic.UV); //construct the TriMesh using specified vertex layout var m = TriMesh.FromMesh(vd, mesh); //print each vertex's position, normal and uv foreach(var vtx in m) { var v_pos = vtx.ReadVector3(pos); var v_normal = vtx.ReadVector3(normal); var v_uv = vtx.ReadVector2(uv); Console.WriteLine($"({v_pos}), ({v_uv}), ({v_normal})"); }
如果您的TriMesh實例帶有不確定的內存布局,則可以使用此方法來構造具有確切所需的內存布局的新實例。
用法示例:
Scene s = new Scene(@"test.STL"); var mesh = (Mesh)s.RootNode.ChildNodes[0].Entity; var originalTriMesh = TriMesh.FromMesh(mesh); //If the original TriMesh's memory layout is not what you wanted, you can use CopyFrom to get a new instance //with specified memory layout var vd = new VertexDeclaration(); var pos = vd.AddField(VertexFieldDataType.FVector3, VertexFieldSemantic.Position); var normal = vd.AddField(VertexFieldDataType.FVector3, VertexFieldSemantic.Normal); var uv = vd.AddField(VertexFieldDataType.FVector2, VertexFieldSemantic.UV); var m = TriMesh.CopyFrom(originalTriMesh, vd); foreach(var vtx in m) { //Field's offset in vertex can be retrieved by VertexField.Offset var v_pos = vtx.ReadVector3(pos); var v_normal = vtx.ReadVector3(normal); var v_uv = vtx.ReadVector2(uv); Console.WriteLine($"({v_pos}), ({v_uv}), ({v_normal})"); }
使用此方法,您可以像反序列化一樣輕松地從字節數組重建TriMesh實例。
用法示例:
Scene s = new Scene(@"test.STL"); var mesh = (Mesh)s.RootNode.ChildNodes[0].Entity; var vd = new VertexDeclaration(); var pos = vd.AddField(VertexFieldDataType.FVector3, VertexFieldSemantic.Position); var normal = vd.AddField(VertexFieldDataType.FVector3, VertexFieldSemantic.Normal); var uv = vd.AddField(VertexFieldDataType.FVector2, VertexFieldSemantic.UV); var originalTriMesh = TriMesh.FromMesh(vd, mesh); //If the original TriMesh's memory layout is not what you wanted, you can use CopyFrom to get a new instance //with specified memory layout byte[] verticesInBytes = originalTriMesh.VerticesToArray(); int[] indices; originalTriMesh.IndicesToArray(out indices); var m = TriMesh.FromRawData(vd, verticesInBytes, indices, true); foreach(var vtx in m) { //Field's offset in vertex can be retrieved by VertexField.Offset var v_pos = vtx.ReadVector3(pos); var v_normal = vtx.ReadVector3(normal); var v_uv = vtx.ReadVector2(uv); Console.WriteLine($"({v_pos}), ({v_uv}), ({v_normal})"); }
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn