Público API Cambios en Aspose.3D 1.7.0
Resumen de contenidos
- Agrega la clase Aspose.ThreeD.Entities.Frustum
- Agrega la clase Aspose.ThreeD.ImageRenderOptions
- Agrega el método MoveForward en la clase Aspose.ThreeD.Entities.Camera
- Agrega los miembros CastShadows y ReceiveShadows en la clase Aspose.ThreeD.Entities.Geometry
- Agrega el método GenerateNormal en la clase Aspose.ThreeD.Entities.PolygonModifier
- Agrega el método Concate en la clase Aspose.ThreeD.Utilities.Quaternion
Agrega la clase Aspose.ThreeD.Entities.Frustum
Se añade una nueva clase Frustum. Camera y Light fueron las subclases de la clase Entity. En la versión 1.7.0, estas clases se heredan de Frustum y Frustum se hereda de Entity, ya que las propiedades Position, Up, LookAt, Direction, Target, NearPlane y FarPlane se extraen en Frustum.
Miembros extraídos de Aspose.ThreeD.Entities.Camera a Aspose.ThreeD.Entities.Frustum Todas estas propiedades se extraen a Frustum:
C#
Aspose.ThreeD.Utilities.Vector3 Position{ get;set;}
Aspose.ThreeD.Utilities.Vector3 Up{ get;set;}
Aspose.ThreeD.Utilities.Vector3 LookAt{ get;set;}
Aspose.ThreeD.Utilities.Vector3 Direction{ get;set;}
Aspose.ThreeD.Node Target{ get;set;}
double NearPlane{ get;set;}
double FarPlane{ get;set;}
Miembros extraídos de la clase Aspose.ThreeD.Entities.Light a Aspose.ThreeD.Entities.Frustum Todas estas propiedades se extraen a Frustum:
C#
Aspose.ThreeD.Node Target{ get;set;}
Aspose.ThreeD.Utilities.Vector3 Direction{ get;set;}
Agrega la clase Aspose.ThreeD.ImageRenderOptions
Convertir un archivo 3D al formato de archivo de imagen
C#
// load an existing 3D scene
Scene scene = new Scene("test.obj");
// create a camera at (10,10,10) and look at the origin point for rendering, it must be attached to the scene before render
Camera camera = new Camera();
scene.RootNode.CreateChildNode("camera", camera);
camera.ParentNode.Transform.Translation = new Vector3(10, 10, 10);
camera.LookAt = Vector3.Origin;
//Specify the image render option
ImageRenderOptions opt = new ImageRenderOptions();
// set background color
opt.BackgroundColor = Color.AliceBlue;
// specify the path of textures
opt.AssetDirectories.Add(@"assets\textures");
// turn on shadow
opt.EnableShadows = true;
//render the scene in given camera's perspective into specified png file with size 1024x1024
scene.Render(camera, fileName, new Size(1024, 1024), ImageFormat.Png, opt);
Miembros agregados a la clase Aspose.ThreeD. Escena:
C#
public void Render(Aspose.ThreeD.Entities.Camera camera, string fileName, System.Drawing.Size size, System.Drawing.Imaging.ImageFormat format)
public void Render(Aspose.ThreeD.Entities.Camera camera, string fileName, System.Drawing.Size size, System.Drawing.Imaging.ImageFormat format, Aspose.ThreeD.ImageRenderOptions options)
public void Render(Aspose.ThreeD.Entities.Camera camera, System.Drawing.Bitmap bitmap)
public void Render(Aspose.ThreeD.Entities.Camera camera, System.Drawing.Bitmap bitmap, Aspose.ThreeD.ImageRenderOptions options)
Agrega el método MoveForward en la clase Aspose.ThreeD.Entities.Camera
Avanza la cámara hacia su orientación. La orientación de una cámara está especificada por cualquiera de los objetivos/dirección/mirador
- **Objetivo:**Un nodo objetivo en el espacio, la cámara siempre mirará este objetivo sea cual sea el objetivo/cámara que haya cambiado su posición en el espacio.
- **LookAt:**Una posición fija en el espacio, la cámara siempre mirará esta posición.
- **Dirección:**Un vector de dirección, la orientación de una cámara es especificada directamente por este vector cualquiera que sea su posición.
Método Firma:
C#
public void MoveForward(double distance)
Agrega los miembros CastShadows y ReceiveShadows en la clase Aspose.ThreeD.Entities.Geometry
Algunos formatos de archivo pueden almacenar configuraciones relacionadas con sombras en geometría como FBX, y también se usan en renderizado. En este ejemplo de código, las sombras del cuadro rojo y el toro se proyectan en el plano, el cuadro rojo no recibirá sombras y el cuadro azul no proyectará sombras.
C#
Scene scene = new Scene();
Camera camera = new Camera();
camera.NearPlane = 0.1;
scene.RootNode.CreateChildNode("camera", camera);
Light light;
scene.RootNode.CreateChildNode("light", light = new Light()
{
NearPlane = 0.1,
CastShadows = true,
Color = new Vector3(Color.White)
}).Transform.Translation = new Vector3(9.4785, 5, 3.18);
light.LookAt = Vector3.Origin;
light.Falloff = 90;
//Create a plane
Node plane = scene.RootNode.CreateChildNode("plane", new Plane(20, 20));
plane.Material = new PhongMaterial() {DiffuseColor = new Vector3(Color.DarkOrange)};
plane.Transform.Translation = new Vector3(0, 0, 0);
//Create a torus for casting shadows
Mesh m = (new Torus("", 1, 0.4, 20, 20, Math.PI*2)).ToMesh();
Node torus = scene.RootNode.CreateChildNode("torus", m);
torus.Material = new PhongMaterial() {DiffuseColor = new Vector3(Color.Cornsilk)};
torus.Transform.Translation = new Vector3(2, 1, 1);
{//Create a blue box don't cast shadows
m = (new Box()).ToMesh();
m.CastShadows = false;
Node box = scene.RootNode.CreateChildNode("box", m);
box.Material = new PhongMaterial() {DiffuseColor = new Vector3(Color.Blue)};
box.Transform.Translation = new Vector3(2, 1, -1);
}
{// Create a red box that don't receive shadow but cast shadows
m = (new Box()).ToMesh();
m.ReceiveShadows = false;
Node box = scene.RootNode.CreateChildNode("box", m);
box.Material = new PhongMaterial() {DiffuseColor = new Vector3(Color.Red)};
box.Transform.Translation = new Vector3(-2, 1, 1);
}
camera.ParentNode.Transform.Translation = new Vector3(10, 10, 10);
camera.LookAt = Vector3.Origin;
ImageRenderOptions opt = new ImageRenderOptions() {EnableShadows = true};
scene.Render(camera, "pic.png", new Size(1024, 1024), ImageFormat.Png, opt);
Agrega el método GenerateNormal en la clase Aspose.ThreeD.Entities.PolygonModifier
Permite a los desarrolladores generar datos normales a partir de la instancia de Mesh, si el elemento VertexElementSmoothingGroup se definió en la malla, los datos normales generados serán suavizados por VertexElementSmoothingGroup.
Método Firma:
C#
public static Aspose.ThreeD.Entities.VertexElementNormal GenerateNormal(Aspose.ThreeD.Entities.Mesh mesh)
Código de muestra:
C#
//Load a 3ds file, 3ds file doesn't have normal data, but it has smoothing group
Scene s = new Scene("test.3ds");
//Visit all nodes and create normal data for all meshes
s.RootNode.Accept(delegate(Node n)
{
Mesh mesh = n.GetEntity<Mesh>();
if (mesh != null)
{
VertexElementNormal normals = PolygonModifier.GenerateNormal(mesh);
mesh.VertexElements.Add(normals);
}
return true;
});
Agrega el método Concate en la clase Aspose.ThreeD.Utilities.Quaternion
Permite a los desarrolladores concatenar dos transformaciones de rotación en una representada en Quaternion.
Método Firma:
C#
public Aspose.ThreeD.Utilities.Quaternion Concate(Aspose.ThreeD.Utilities.Quaternion rhs)
Código de muestra:
C#
Scene scene = new Scene();
Quaternion q1 = Quaternion.FromEulerAngle(Math.PI * 0.5, 0, 0);
Quaternion q2 = Quaternion.FromAngleAxis(- Math.PI * 0.5, Vector3.XAxis);
//concatenate q1 and q2. q1 and q2 rotate alone x-axis with same angle but different direction, so the concatenated result will be identity quaternion.
Quaternion q3 = q1.Concate(q2);
//Create 3 cylinders to represent each quaternion
Node cylinder = scene.RootNode.CreateChildNode("cylinder-q1", new Cylinder(0.1, 1, 2));
cylinder.Transform.Rotation = q1;
cylinder.Transform.Translation = new Vector3(-5, 2, 0);
cylinder = scene.RootNode.CreateChildNode("cylinder-q2", new Cylinder(0.1, 1, 2));
cylinder.Transform.Rotation = q2;
cylinder.Transform.Translation = new Vector3(0, 2, 0);
cylinder = scene.RootNode.CreateChildNode("cylinder-q3", new Cylinder(0.1, 1, 2));
cylinder.Transform.Rotation = q3;
cylinder.Transform.Translation = new Vector3(5, 2, 0);
//Save to file
scene.Save("test.fbx", FileFormat.FBX7400ASCII);