原創(chuàng)|產(chǎn)品更新|編輯:李顯亮|2020-04-10 11:17:53.140|閱讀 363 次
概述:Aspose.3D更新至最新版v20.4,添加Linux渲染支持 ,添加軌道運(yùn)動(dòng)控制,添加A3DW格式的線路支持,歡迎下載體驗(yàn)。
# 界面/圖表報(bào)表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
Aspose.3D for .NET是功能豐富的游戲軟件和計(jì)算機(jī)輔助設(shè)計(jì)(CAD)API,用于處理3D文檔格式,無需任何3D建模和渲染軟件依賴。同時(shí)支持Discreet3DS、WavefrontOBJ、FBX(ASCII,二進(jìn)制)、STL(ASCII,二進(jìn)制)、Universal3D、Collada、glTF、GLB、PLY、DirectX、Google Draco文件格式等。開發(fā)人員可以輕松地創(chuàng)建,閱讀,轉(zhuǎn)換,修改和控制3D文檔格式的內(nèi)容。
近日,Aspose.3D迎來了2020年4月更新,新增Linux渲染支持 ,添加軌道運(yùn)動(dòng)控制,添加A3DW格式的線路支持,具體更新如下: >>點(diǎn)擊下載Aspose.3D v20.4
key | 概述 | 類別 |
---|---|---|
THREEDNET-663 | 添加Linux渲染支持 | 新功能 |
THREEDNET-661 | 使用自定義VertexDeclaration獲取數(shù)據(jù) | 增強(qiáng)功能 |
THREEDNET-652 | 添加軌道運(yùn)動(dòng)控制 | 增強(qiáng)功能 |
THREEDNET-653 | 添加A3DW格式的線路支持。 | 增強(qiáng)功能 |
THREEDNET-655 | 添加TriMesh的渲染支持 | 增強(qiáng)功能 |
THREEDNET-656 | Web渲染器中的燈光渲染不正確 | Bug修復(fù) |
用法示例:
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實(shí)例帶有不確定的內(nèi)存布局,則可以使用此方法來構(gòu)造具有確切所需的內(nèi)存布局的新實(shí)例。
用法示例:
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})"); }
使用此方法,您可以像反序列化一樣輕松地從字節(jié)數(shù)組重建TriMesh實(shí)例。
用法示例:
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})"); }
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請(qǐng)務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請(qǐng)郵件反饋至chenjj@fc6vip.cn