Aspose.3D 17.8.0

There is a newer version of this package available.
See the version list below for details.
dotnet add package Aspose.3D --version 17.8.0
NuGet\Install-Package Aspose.3D -Version 17.8.0
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Aspose.3D" Version="17.8.0" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add Aspose.3D --version 17.8.0
#r "nuget: Aspose.3D, 17.8.0"
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install Aspose.3D as a Cake Addin
#addin nuget:?package=Aspose.3D&version=17.8.0

// Install Aspose.3D as a Cake Tool
#tool nuget:?package=Aspose.3D&version=17.8.0

Aspose.3D is a class library for working with 3D files. It allows developers to create/manipulate/render 3D scene and work with FBX,STL,OBJ,3DS,U3D,DAE,PDF,DRC,GLTF files. It allows you to open files and manipulate the elements in the 3D scene, from line,mesh,nurbs curve, to more complex elements animation, and then export to FBX ASCII, FBX binary, STL ASCII, STL binary, Collada, Wavefront .obj, 3DS, PDF formats, glTF, glTF2, Google Draco.

Product Compatible and additional computed target framework versions.
.NET Framework net35 is compatible.  net40 is compatible.  net403 was computed.  net45 was computed.  net451 was computed.  net452 was computed.  net46 was computed.  net461 was computed.  net462 was computed.  net463 was computed.  net47 was computed.  net471 was computed.  net472 was computed.  net48 was computed.  net481 was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

This package has no dependencies.

NuGet packages (4)

Showing the top 4 NuGet packages that depend on Aspose.3D:

Package Downloads
Aspose.Total

Aspose.Total for .NET is the most complete package of all .NET file format APIs offered by Aspose. It empowers developers to create, edit, render, print and convert between a wide range of popular document formats within any .NET, C#, ASP.NET and VB.NET applications.

Aspose.3D.Codec.SkiaSharp

This plugin allows you to use SkiaSharp's image codec to encode and decode textures.

nilnul.geometry._stereo_._LIB_

cubic/3dimension geometry

Pilz.Simple3DFileParser

Package Description

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
24.3.0 1,404 3/26/2024
24.2.0 1,578 2/28/2024
24.1.0 2,255 1/30/2024
23.12.0 4,106 12/28/2023
23.11.1 1,202 12/8/2023
23.11.0 4,161 11/29/2023
23.10.0 4,196 10/30/2023
23.9.0 5,618 9/27/2023
23.8.0 7,635 8/25/2023
23.7.0 7,055 7/26/2023
23.6.0 6,880 6/26/2023
23.5.0 5,338 5/26/2023
23.4.0 7,089 4/13/2023
23.3.0 6,939 3/16/2023
23.2.0 6,525 2/14/2023
23.1.0 10,618 1/18/2023
22.12.0 9,724 12/21/2022
22.11.0 9,806 11/17/2022
22.10.0 11,047 10/14/2022
22.9.0 7,357 9/9/2022
22.8.0 19,962 8/3/2022
22.7.0 7,135 7/8/2022
22.6.0 10,875 6/10/2022
22.5.0 11,840 5/9/2022
22.4.0 6,960 4/13/2022
22.3.0 14,924 3/4/2022
22.2.0 8,617 2/7/2022
22.1.0 9,657 1/5/2022
21.12.0 2,590 12/3/2021
21.11.0 8,515 11/11/2021
21.10.0 6,799 10/9/2021
21.9.0 12,695 9/6/2021
21.8.0 14,753 8/6/2021
21.7.0 11,452 7/5/2021
21.6.0 4,409 6/7/2021
21.5.0 9,333 5/6/2021
21.4.0 10,673 4/2/2021
21.3.0 7,612 3/4/2021
21.2.1 10,457 2/14/2021
21.2.0 1,787 2/7/2021
21.1.0 3,538 1/8/2021
20.12.2 3,736 12/10/2020
20.12.0 1,704 12/5/2020
20.11.0 7,903 11/3/2020
20.9.0 4,066 9/4/2020
20.8.0 3,228 8/11/2020
20.7.0 3,197 7/3/2020
20.6.1 2,594 6/16/2020
20.6.0 3,316 6/8/2020
20.5.0 10,240 5/12/2020
20.4.0 4,711 4/9/2020
20.3.0 4,179 3/3/2020
20.2.1 3,372 2/14/2020
20.2.0 2,053 2/10/2020
20.1.0 4,915 1/2/2020
19.12.2 3,519 12/10/2019
19.12.0 1,716 12/9/2019
19.11.0 2,274 11/5/2019
19.10.0 36,110 10/9/2019
19.9.0 2,357 9/9/2019
19.8.0 2,200 8/2/2019
19.7.0 2,344 7/8/2019
19.6.0 2,572 6/5/2019
19.5.0 2,610 5/12/2019
19.4.0 2,165 4/4/2019
19.3.0 2,180 3/8/2019
19.2.0 2,869 2/2/2019
19.1.0 2,057 1/9/2019
18.12.0 2,279 12/6/2018
18.11.0 2,327 11/6/2018
18.10.0 2,160 10/9/2018
18.9.0 2,608 9/6/2018
18.8.0 2,195 8/8/2018
18.7.0 2,588 7/11/2018
18.6.0 3,216 6/11/2018
18.5.0 2,623 5/10/2018
18.4.0 2,495 4/16/2018
18.3.0 2,303 3/14/2018
18.2.0 2,379 2/8/2018
18.1.0 2,545 1/8/2018
17.12.0 2,314 12/8/2017
17.11.0 2,755 11/6/2017
17.10.0 2,257 10/10/2017
17.9.0 2,294 9/7/2017
17.8.0 2,231 8/8/2017
17.7.0 2,326 7/17/2017
17.6.0 2,929 6/5/2017
17.5.0 2,518 5/8/2017
17.4.0 2,424 4/5/2017
17.3.0 2,285 3/6/2017
17.2.0 2,316 2/15/2017
17.1.0 2,359 1/5/2017
16.12.0 2,582 12/4/2016
16.11.0 2,460 11/1/2016
16.9.0 2,313 9/29/2016
2.1.0 2,351 8/30/2016
2.0.0 2,472 8/2/2016
1.7.0 2,310 6/29/2016
1.6.1 2,641 5/26/2016
1.5.0 2,408 4/27/2016
1.4.0 2,406 4/1/2016
1.3.0 2,436 2/23/2016
1.2.0 2,453 12/18/2015
1.1.0 2,609 11/27/2015
1.0.0 2,487 10/26/2015

This page contains release notes for Aspose.3D for .NET 17.8.

                   
   
Other Improvements and Changes
Key Summary Category

THREEDNET-279 Render scene into a cube map with 6 faces.
New feature


THREEDNET-280 Add post-processing of equirectangular projection. New feature

THREEDNET-281 Render cube map to fisheye. New feature

THREEDNET-276 Incorrect conversion of OBJ to GLTF and GLB. Bug

Public API and Backwards Incompatible Changes
See the list of any changes made to the public API such as added, renamed, removed or deprecated members as well as any non-backward compatible change made to Aspose.3D for .NET. If you have concerns about any change listed, please raise it on the Aspose.3D support forum.
Methods marked as obsoleted and will be removed in the end of this year 2017

Before the 17.8 all texture units (used by the renderer) are represented by the interface ITextureUnit but this design is not working well for the cube map and 3D texture in the future (not implemented yet), so these methods are all marked as obsolete, to make sure that the code will not break the compiler, developers should use the methods with same name from ITexture1D/ITexture2D/ITextureCubemap.
C#

interface ITextureUnit
{
   void Load(TextureData bitmap);
   void Save(string path, ImageFormat format);
   void Save(Bitmap bitmap);
   Bitmap ToBitmap();



Added new enum type Aspose.ThreeD.Render.CubeFace

This type works with Aspose.ThreeD.Render.CubeFaceData<> and Aspose.ThreeD.Render.ITextureCubemap to access data as per the face of cubemap.
C#

/// <summary>
/// Each face of the cube map texture
/// </summary>
public enum CubeFace
{
   /// <summary>
   /// The +X face
   /// </summary>
   PositiveX,
   /// <summary>
   /// The -X face
   /// </summary>
   NegativeX,
   /// <summary>
   /// The +Y face
   /// </summary>
   PositiveY,
   /// <summary>
   /// The -Y face
   /// </summary>
   NegativeY,
   /// <summary>
   /// The +Z face
   /// </summary>
   PositiveZ,
   /// <summary>
   /// The -Z face
   /// </summary>
   NegativeZ
}


Added new class Aspose.ThreeD.Render.CubeFaceData<>
This class is a generic class to describe per cubemap face's data like file name or bitmap.
Added new class Aspose.ThreeD.Render.ITextureCubemap
C#

/// <summary>
/// Cube map texture
/// </summary>
public interface ITextureCubemap : ITextureUnit
{
   /// <summary>
   /// Load texture content from specified files
   /// </summary>
   /// <param name="fileNames"></param>
   void Load(CubeFaceData<string> fileNames);
   /// <summary>
   /// Load texture content from specified <see cref="TextureData"/>
   /// </summary>
   /// <param name="data"></param>
   void Load(CubeFaceData<TextureData> data);
   /// <summary>
   /// Load the data into specified face
   /// </summary>
   /// <param name="face"></param>
   /// <param name="data"></param>
   void Load(CubeFace face, TextureData data);
   /// <summary>
   /// Save the cube&#39;s sides texture content to external files.
   /// </summary>
   /// <param name="path">File names to save.</param>
   /// <param name="format">Image format</param>
   void Save(CubeFaceData<string> path, ImageFormat format);
   /// <summary>
   /// Save the texture content to memory.
   /// </summary>
   /// <param name="bitmap">Result bitmap to save.</param>
   void Save(CubeFaceData<Bitmap> bitmap);

   /// <summary>
   /// Save the specified side to memory
   /// </summary>
   /// <param name="side"></param>
   /// <param name="bitmap"></param>
   void Save(CubeFace side, Bitmap bitmap);

   /// <summary>
   /// Convert the texture unit to <see cref="Bitmap"/> instance
   /// </summary>
   Bitmap ToBitmap(CubeFace side);    
}

C#

//The model used in this sample can be found at https://github.com/KhronosGroup/glTF-Sample-Models/tree/master/1.0/VC/glTF-Binary
string path = @"D:\Projects\glTF-Sample-Models\1.0\VC\glTF-Binary\VC.glb";
//load the scene
Scene scene = new Scene(path);
//create a camera for capturing the cube map
Camera cam = new Camera(ProjectionType.Perspective)
{
   NearPlane = 0.1,
   FarPlane = 200,
   RotationMode = RotationMode.FixedDirection
};
scene.RootNode.CreateChildNode(cam).Transform.Translation = new Vector3(5, 6, 0);
//create two lights to illuminate the scene
scene.RootNode.CreateChildNode(new Light() {LightType = LightType.Point}).Transform.Translation = new Vector3(-10, 7, -10);
scene.RootNode.CreateChildNode(new Light()
{
   Color = new Vector3(Color.CadetBlue)
}).Transform.Translation = new Vector3(49, 0, 49);

//create a renderer
using (var renderer = Renderer.CreateRenderer())
{
   //Create a cube map render target with depth texture, depth is required when rendering a scene.
   IRenderTexture rt = renderer.RenderFactory.CreateCubeRenderTexture(new RenderParameters(false), 512, 512);
   //a viewport is required on the render target
   rt.CreateViewport(cam, RelativeRectangle.FromScale(0, 0, 1, 1));
   renderer.Render(rt);
   //now lets get the cubemap texture
   ITextureCubemap cubemap = rt.Targets[0] as ITextureCubemap;
   //we can directly save each face to disk by specifing the file name
   CubeFaceData<string> fileNames = new CubeFaceData<string>()
   {
       Right = "right.png",
       Left = "left.png",
       Back = "back.png",
       Front = "front.png",
       Bottom = "bottom.png",
       Top = "top.png"
   };
   //and call Save method
   cubemap.Save(fileNames, ImageFormat.Png);
   //or we just need to use the render result in memory, we can save it to CubeFaceData<Bitmap>
   CubeFaceData<Bitmap> bitmaps = new CubeFaceData<Bitmap>();
   cubemap.Save(bitmaps);
   bitmaps.Back.Save("back.bmp", ImageFormat.Bmp);
}


Added new class Aspose.ThreeD.Render.ITexture1D
This interface is used to represent an 1D texture object
Added new class Aspose.ThreeD.Render.ITexture2D
This interface is used to represent a 2D texture object
Added new methods to class Aspose.ThreeD.Render.RenderFactory:C#

// this is an overloaded version for method IRenderTexture CreateRenderTexture(Aspose.ThreeD.Render.RenderParameters parameters, int targets, int width, int height) with targets to 1
public Aspose.ThreeD.Render.IRenderTexture CreteRenderTexture(Aspose.ThreeD.Render.RenderParameters parameters, int width, int height)
//Create a render target that will render the scene into a cube map
public Aspose.ThreeD.Render.IRenderTexture CreateCubeRenderTexture(Aspose.ThreeD.Render.RenderParameters parameters, int width, int height)
// allow user to create ITexture1D/ITexture2D/ITextureCubemap manually
public Aspose.ThreeD.Render.ITextureUnit CreateTextureUnit(Aspose.ThreeD.Render.TextureType textureType)

Added new method in class Aspose.ThreeD.Render.Renderer:

In the previous versions the post processing can only be used by providing a chain of post processing effects to Aspose.ThreeD.Render.Renderer.PostProcessings, now with this method user can manually execute the post processing procedure, this is useful in the new feature THREEDNET-280 and THREEDNET-281, means you can render a cubemap into a panaroma image or fisheye image.
C#

public void Execute(Aspose.ThreeD.Render.PostProcessing postProcessing, Aspose.ThreeD.Render.IRenderTarget result)


 

 

 

Generate a Panaroma Image in 3D Scene

Developers can use 3rd party tools like three.js/Pano2VR to visualize the result.
C#

//The model used in this sample can be found at https://github.com/KhronosGroup/glTF-Sample-Models/tree/master/1.0/VC/glTF-Binary
string path = @"D:\Projects\glTF-Sample-Models\1.0\VC\glTF-Binary\VC.glb";
//load the scene
Scene scene = new Scene(path);
//create a camera for capturing the cube map
Camera cam = new Camera(ProjectionType.Perspective)
{
   NearPlane = 0.1,
   FarPlane = 200,
   RotationMode = RotationMode.FixedDirection
};
scene.RootNode.CreateChildNode(cam).Transform.Translation = new Vector3(5, 6, 0);

//create two lights to illuminate the scene
scene.RootNode.CreateChildNode(new Light() {LightType = LightType.Point}).Transform.Translation = new Vector3(-10, 7, -10);
scene.RootNode.CreateChildNode(new Light()
{
   Color = new Vector3(Color.CadetBlue)
}).Transform.Translation = new Vector3(49, 0, 49);
//create a renderer
using (var renderer = Renderer.CreateRenderer())
{
   //Create a cube map render target with depth texture, depth is required when rendering a scene.
   IRenderTexture rt = renderer.RenderFactory.CreateCubeRenderTexture(new RenderParameters(false), 512, 512);
   //create a 2D texture render target with no depth texture used for image processing
   IRenderTexture final = renderer.RenderFactory.CreateRenderTexture(new RenderParameters(false, 32, 0, 0), 1024 * 3 , 1024);

   //a viewport is required on the render target
   rt.CreateViewport(cam, RelativeRectangle.FromScale(0, 0, 1, 1));
   renderer.Render(rt);

   //execute the equirectangular projection post-processing with the previous rendered cube map as input
   PostProcessing equirectangular = renderer.GetPostProcessing("equirectangular");
   //Specify the cube map rendered from the scene as this post processing&#39;s input
   equirectangular.Input = rt.Targets[0];
   //Execute the post processing effect and save the result to render target final
   renderer.Execute(equirectangular, final);
   //save the texture into disk
   ((ITexture2D)final.Targets[0]).Save("panaroma.png", ImageFormat.Png);
}


 

 

 


Generate Fisheye Lens Effect in 3D Scene
C#

//The model used in this sample can be found at https://github.com/KhronosGroup/glTF-Sample-Models/tree/master/1.0/VC/glTF-Binary
string path = @"D:\Projects\glTF-Sample-Models\1.0\VC\glTF-Binary\VC.glb";
//load the scene
Scene scene = new Scene(path);
//create a camera for capturing the cube map
Camera cam = new Camera(ProjectionType.Perspective)
{
   NearPlane = 0.1,
   FarPlane = 200,
   RotationMode = RotationMode.FixedDirection
};
scene.RootNode.CreateChildNode(cam).Transform.Translation = new Vector3(5, 6, 0);

//create two lights to illuminate the scene
scene.RootNode.CreateChildNode(new Light() {LightType = LightType.Point}).Transform.Translation = new Vector3(-10, 7, -10);
scene.RootNode.CreateChildNode(new Light()
{
   Color = new Vector3(Color.CadetBlue)
}).Transform.Translation = new Vector3(49, 0, 49);

//create a renderer
using (var renderer = Renderer.CreateRenderer())
{
   //Create a cube map render target with depth texture, depth is required when rendering a scene.
   IRenderTexture rt = renderer.RenderFactory.CreateCubeRenderTexture(new RenderParameters(false), 512, 512);
   //create a 2D texture render target with no depth texture used for image processing
   IRenderTexture final = renderer.RenderFactory.CreateRenderTexture(new RenderParameters(false, 32, 0, 0), 1024, 1024);

   //a viewport is required on the render target
   rt.CreateViewport(cam, RelativeRectangle.FromScale(0, 0, 1, 1));
   renderer.Render(rt);

   //execute the fisheye projection post-processing with the previous rendered cube map as input
   //the fisheye can have field of view more than 180 degree, so a cube map with all direction is required.
   PostProcessing fisheye = renderer.GetPostProcessing("fisheye");
   // we can change the fov to 360 instead of the default value 180.
   fisheye.FindProperty("fov").Value = 360.0;
   //Specify the cube map rendered from the scene as this post processing&#39;s input
   fisheye.Input = rt.Targets[0];
   //Execute the post processing effect and save the result to render target final
   renderer.Execute(fisheye, final);
   //save the texture into disk
   ((ITexture2D)final.Targets[0]).Save("fisheye.png", ImageFormat.Png);
}


Added methods to struct Aspose.ThreeD.Utilities.FVector3:


These are the two primitive operations of vectors.
C#

//Calculate the normalized vector of the FVector3, equivalent implementation of Vector3.Normalize
public Aspose.ThreeD.Utilities.FVector3 Normalize()
//Calculate the cross product of two FVector3, equivalent implementation of Vector3.Cross
public Aspose.ThreeD.Utilities.FVector3 Cross(Aspose.ThreeD.Utilities.FVector3 rhs)





Usage Examples

Please check the list of help topics added or updated in the Aspose.3D Wiki docs:

   
       

       
https://docs.aspose.com/display/3dnet/Aspose.3D+for+.NET+17.8+Release+Notes