Aspose.3D for .NET 21.1 Release Notes

Improvements and Changes

Key Summary Category
THREEDNET-784 Add support of USDC format New feature
THREEDNET-773 Add material support for DXF file Improvement
THREEDNET-797 Add support for .net 5.0 Improvement
THREEDNET-803 Improve ComboBox in web renderer. Improvement
THREEDNET-795 Obj to u3d conversion - missing texture Bug fix
THREEDNET-801 The implementation of camera’s orthographic projection is incorrect Bug fix
THREEDNET-783 Map bitmap to triangles from GLB. Bug fix
THREEDNET-802 Draco/glTF Files used prediction degree algorithm will failed to import. Bug fix
THREEDNET-804 Aspose.3D rendering does not work on some integrated GPU Bug fix

API changes

There’s two major changes in 21.1,

  • Renderer’s performance improved by separating the preparation and render, also fixed some rendering related bugs.
  • Added support of USDC import

Added class Aspose.ThreeD.Render.IRenderQueue

An IRenderQueue instance will be passed to EntityRenderer when renderer is trying to render something, the EntityRenderer will need to prepare for the hardware resources used for rendering and add the render tasks to the render queue in EntityRenderer.PrepareRenderQueue

Removed class Aspose.ThreeD.Render.IRenderable

This is an obsoleted interface and was useful for a long time, it’s safe to remove this.

Added new members to class Aspose.ThreeD.FileFormat:

        /// <summary>
        /// Gets the extension names of this type.
        /// </summary>
        public string[] Extensions{ get;}

        /// <summary>
        /// Universal Scene Description
        /// </summary>
        public static readonly Aspose.ThreeD.FileFormat USD;

Some formats like USD, GLTF may contains more than one extensions, we introduced a new property to get all extensions.

Refactored class Aspose.ThreeD.Render.EntityRenderer:

        public void PrepareRenderQueue(Aspose.ThreeD.Render.Renderer renderer, Aspose.ThreeD.Node node, Aspose.ThreeD.Entity entity)

Has been changed into two functions:

        /// <summary>
        /// Prepare rendering commands for specified node/entity pair.
        /// </summary>
        /// <param name="renderer">The current renderer instance</param>
        /// <param name="queue">The render queue used to manage render tasks</param>
        /// <param name="node">Current node</param>
        /// <param name="entity">The entity that need to be rendered</param>
        public void PrepareRenderQueue(Aspose.ThreeD.Render.Renderer renderer, Aspose.ThreeD.Render.IRenderQueue queue, Aspose.ThreeD.Node node, Aspose.ThreeD.Entity entity)
        /// <summary>
        /// Each render task pushed to the <see cref="IRenderQueue"/> will have a corresponding RenderEntity call
        /// to perform the concrete rendering job.
        /// </summary>
        /// <param name="renderer">The renderer</param>
        /// <param name="commandList">The commandList used to record the rendering commands</param>
        /// <param name="node">The same node that passed to PrepareRenderQueue of the entity that will be rendered </param>
        /// <param name="renderableResource">The custom object that passed to IRenderQueue during the PrepareRenderQueue </param>
        /// <param name="subEntity">The index of the sub entity that passed to IRenderQueue</param>
        public virtual void RenderEntity(Renderer renderer, ICommandList commandList, Node node, object renderableResource, int subEntity);

In the old implementation, the hardware resources used by rendering created during the PrepareRenderQueue stage, may cause some problems in some drivers.

So we separate the preparing and rendering, and optimized some internal caches.

Obsoleted member removed from class Aspose.ThreeD.Render.RenderFactory:

        public Aspose.ThreeD.Render.IRenderWindow CreateRenderWindow(Aspose.ThreeD.Render.RenderParameters parameters, System.IntPtr handle)

This removal was scheduled, and this obsoleted function has a replacement with same name.