Browse our Products
Aspose.3D for .NET 17.8 Notes de Libération
Autres améliorations et changements
Clé | Résumé | Catégorie |
---|---|---|
THREEDNET-279 | Rendre scène dans une carte cube avec 6 visages. | Nouvelle fonctionnalité |
THREEDNET-280 | Ajouter le post-traitement de la projection équirectangulaire. | Nouvelle fonctionnalité |
THREEDNET-281 | Rendre la carte du cube à fisheye. | Nouvelle fonctionnalité |
THREEDNET-276 | Conversion incorrecte du OBJ en GLTF et GLB. | Bug |
Public API et changements incompatibles vers l’arrière
Voir la liste de toutes les modifications apportées au public API telles que les membres ajoutés, renommés, supprimés ou dépréciés ainsi que toute modification non rétrocompatible apportée au Aspose.3D for .NET. Si vous avez des préoccupations concernant un changement répertorié, veuillez le soulever sur leAspose.3D forum de soutien.
Méthodes marquées comme obsolètes et seront supprimées à la fin de cette année 2017
Avant le 17.8, toutes les unités de texture (utilisées par le moteur de rendu) sont représentées par l’interface ITextureUnit mais cette conception ne fonctionne pas bien pour la carte de cube et la texture 3D à l’avenir (pas encore implémentée), donc ces méthodes sont toutes marquées comme obsolètes, Pour s’assurer que le code ne cassera pas le compilateur, les développeurs doivent utiliser les méthodes portant le même nom d’ITexture1D/ITexture2D/ITextureCubemap.
C#
interface ITextureUnit
{
void Load(TextureData bitmap);
void Save(string path, ImageFormat format);
void Save(Bitmap bitmap);
Bitmap ToBitmap();
}
Ajouté nouveau type enum Aspose.ThreeD.Render.CubeFace
Ce type fonctionne avec Aspose.ThreeD.Render.CubeFaceData<>Et Aspose.ThreeD.Render.ITextureCubemap pour accéder aux données selon le visage de 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
}
Ajouté nouvelle classe Aspose.ThreeD.Render.CubeFaceData<>
Cette classe est une classe générique pour décrire les données de la face cubemap comme le nom de fichier ou le bitmap.
Ajouté nouvelle classe Aspose.ThreeD. Rendre. 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'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);
}
Ajouté nouvelle classe Aspose.ThreeD. Rendre. Itexture1D
Cette interface est utilisée pour représenter un objet de texture 1D
Ajouté nouvelle classe Aspose.ThreeD.Render. Itexture2D
Cette interface est utilisée pour représenter un objet de texture 2D
Ajout de nouvelles méthodes à la classe 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)
Ajout d’une nouvelle méthode dans la classe Aspose.ThreeD.Render.Renderer:
Dans les versions précédentes, le post-traitement ne peut être utilisé qu’en fournissant une chaîne d’effets de post-traitement au Aspose.ThreeD. Rendre. Renderer.PostProcessings, maintenant avec cette méthode, l’utilisateur peut exécuter manuellement la procédure de post-traitement, cela est utile dans la nouvelle fonctionnalité THREEDNET-280 et THREEDNET-281, signifie que vous pouvez rendre un cubemap en une image panorama ou une image fisheye.
C#
public void Execute(Aspose.ThreeD.Render.PostProcessing postProcessing, Aspose.ThreeD.Render.IRenderTarget result)
Générer une image Panorama dans la scène 3D
Les développeurs peuvent utiliser des outils tiers comme three.js/Pano2VR pour visualiser le résultat.
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'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("panorama.png", ImageFormat.Png);
}
Générer l’effet de lentille Fisheye dans la scène 3D
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'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);
}
Méthodes ajoutées pour construire Aspose.ThreeD.Utilities.FVector3:
Ce sont les deux opérations primitives de vecteurs.
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)
Exemples d’utilisation
Veuillez consulter la liste des sujets d’aide ajoutés ou mis à jour dans les documents Wiki Aspose.3D: