Configurer des normales ou UV sur le cube et ajouter du matériel aux entités 3D

Créer des vecteurs normaux

Pour avoir un bon aspect visuel sur l’éclairage, nous devons spécifier des informations normales pour chaque sommet, pour avoir de meilleurs détails, nous pouvons également utiliser une carte normale et diffuse (que vous pouvez utiliser l’ombre/carte spéculaire) pour effectuer par pixel normal/couleur. Une information par sommet comme la couleur normale ou vertex est obtenue par VertexElement. Dans Aspose.3D, nous pouvons mapper des informations supplémentaires aux points de contrôle/polygone vertex/polygone/edge, un exemple pour définir les normales pour vertex:

// For complete examples and data files, please go to https://github.com/aspose-3d/Aspose.3D-for-.NET
// Raw normal data
Vector4[] normals = new Vector4[]
{
new Vector4(-0.577350258,-0.577350258, 0.577350258, 1.0),
new Vector4( 0.577350258,-0.577350258, 0.577350258, 1.0),
new Vector4( 0.577350258, 0.577350258, 0.577350258, 1.0),
new Vector4(-0.577350258, 0.577350258, 0.577350258, 1.0),
new Vector4(-0.577350258,-0.577350258,-0.577350258, 1.0),
new Vector4( 0.577350258,-0.577350258,-0.577350258, 1.0),
new Vector4( 0.577350258, 0.577350258,-0.577350258, 1.0),
new Vector4(-0.577350258, 0.577350258,-0.577350258, 1.0)
};
// Call Common class create mesh using polygon builder method to set mesh instance
Mesh mesh = Common.CreateMeshUsingPolygonBuilder();
VertexElementNormal elementNormal = mesh.CreateElement(VertexElementType.Normal, MappingMode.ControlPoint, ReferenceMode.Direct) as VertexElementNormal;
// Copy the data to the vertex element
elementNormal.Data.AddRange(normals);

Les 8 vecteurs normaux sont mappés directement à 8 points de contrôle, dans l’exemple suivant, nous allons démontrer un scénario un peu plus complexe.

Créer des coordonnées UV

Ici, nous n’avons défini que 4 coordonnées UV, mais les avons appliquées à 24 sommets polygonaux (6 face * 4 sommets par polygone) en utilisant des indices. Le Aspose.3D fournit 5 modes de mappage:

  • ControlPoint -chaque donnée est mappée au point de contrôle de la géométrie.
  • PolygonVertex -les données sont mappées au sommet du polygone.
  • Polygon -les données sont mappées au polygone.
  • Edge -les données sont mappées au bord.
  • AllSame -une donnée mappée à la géométrie entière.
// For complete examples and data files, please go to https://github.com/aspose-3d/Aspose.3D-for-.NET
// UVs
Vector4[] uvs = new Vector4[]
{
new Vector4( 0.0, 1.0,0.0, 1.0),
new Vector4( 1.0, 0.0,0.0, 1.0),
new Vector4( 0.0, 0.0,0.0, 1.0),
new Vector4( 1.0, 1.0,0.0, 1.0)
};
// Indices of the uvs per each polygon
int[] uvsId = new int[]
{
0,1,3,2,2,3,5,4,4,5,7,6,6,7,9,8,1,10,11,3,12,0,2,13
};
// Call Common class create mesh using polygon builder method to set mesh instance
Mesh mesh = Common.CreateMeshUsingPolygonBuilder();
// Create UVset
VertexElementUV elementUV = mesh.CreateElementUV(TextureMapping.Diffuse, MappingMode.PolygonVertex, ReferenceMode.IndexToDirect);
// Copy the data to the UV vertex element
elementUV.Data.AddRange(uvs);
elementUV.Indices.AddRange(uvsId);

Ajouter des matériaux aux objets 3D

Aspose.3D for .NET permet aux développeurs d’utiliser l’algorithme d’ombrage pour un ombrage et des reflets précis. Le Phong a plusieurs entrées de carte que nous pouvons utiliser pour masquer l’effet au noeud. Physically Based Rendering (PBR) prend en compte certaines propriétés physiques des objets, une telle approche fournit l’apparence des matériaux comme dans le monde réel.

Matériau Phong avec texture pour cube

Lorsque les coordonnées UV sont prêtes à l’emploi, nous pouvons appliquer une texture sur la surface du maillage en utilisant du matériel. Seule la couleur du sommet ne peut pas décrire les détails de la surface, c’est à cela que servent les matériaux. Voici un exemple pour attacher un matériau Phong au nœud cube:

// For complete examples and data files, please go to https://github.com/aspose-3d/Aspose.3D-for-.NET
// Initialize scene object
Scene scene = new Scene();
// Initialize cube node object
Node cubeNode = new Node("cube");
// Call Common class create mesh using polygon builder method to set mesh instance
Mesh mesh = Common.CreateMeshUsingPolygonBuilder();
// Point node to the mesh
cubeNode.Entity = mesh;
// Add cube to the scene
scene.RootNode.ChildNodes.Add(cubeNode);
// Initiallize PhongMaterial object
PhongMaterial mat = new PhongMaterial();
// Initiallize Texture object
Texture diffuse = new Texture();
// The path to the documents directory.
// Set local file path
diffuse.FileName = RunExamples.GetOutputFilePath("surface.dds");
// Set Texture of the material
mat.SetTexture("DiffuseColor", diffuse);
// Embed raw content data to FBX (only for FBX and optional)
// Set file name
diffuse.FileName = "embedded-texture.png";
// Set binary content
diffuse.Content = File.ReadAllBytes(RunExamples.GetDataFilePath("aspose-logo.jpg"));
// Set color
mat.SpecularColor = new Vector3(Color.Red);
// Set brightness
mat.Shininess = 100;
// Set material property of the cube object
cubeNode.Material = mat;
// Save 3D scene in the supported file formats
scene.Save("MaterialToCube.fbx");

Nous avons spécifié le mappage de texture diffuse et une couleur spéculaire avec un paramètre de brillante.

Appliquer du matériel de rendu à base physique (PBR) à une boîte

PBR joue un rôle clé pour les visuels du moteur de jeu, avec son rendu efficace et réaliste des interactions entre la lumière et la surface via l’atténuation de la luminosité et la diffusion de la lumière réfléchie. Les développeurs peuvent utiliser Aspose.3D API pour appliquer du matériel PBR aux objets 3D dans une scène. Cet exemple de code montre comment créer un objet Box, puis appliquer le matériau PBR.

.NET, C#

 // initialize a scene

Scene scene = new Scene();

// initialize PBR material object

PbrMaterial mat = new PbrMaterial();

// an almost metal material

mat.MetallicFactor = 0.9;

// material surface is very rough

mat.RoughnessFactor = 0.9;

// create a box to which the material will be applied

var boxNode = scene.RootNode.CreateChildNode("box", new Box());

boxNode.Material = mat;

// save 3d scene into STL format

scene.Save(@"C:\3D\PBR_Material_Box_Out.stl", FileFormat.STLASCII);