Materials — LambertMaterial, PhongMaterial, PbrMaterial
Paquet: @aspose/3d (v24.12.0)
@aspose/3d proporciona tres classes concretes de material que amplien la classe base abstracta Material base. Cobreixen els tres models d’ombreig més habituals en formats d’intercanvi 3D:
LambertMaterial— difús + ambient + emissiu (utilitzat per actius OBJ/MTL i FBX més antics)PhongMaterial— amplia Lambert amb propietats d’il·luminació especularPbrMaterial— model basat en la física que coincideix amb la definició de material glTF 2.0
Totes les classes de material s’exporten des del principal @aspose/3d punt d’entrada.
import { LambertMaterial, PhongMaterial, PbrMaterial } from '@aspose/3d';Classe Material (base abstracta)
Material és la classe base abstracta per a tots els materials. Amplia A3DObject, proporcionant el name propietat i l’API de la ranura de textura.
export class Material extends A3DObjectProperties
| Properties | Properties | Properties |
|---|---|---|
name | string | El nom del material tal com apareix al gràfic de l’escena i a la sortida d’exportació. |
Properties
getTexture(slotName)
Retorna el TextureBase assignat a la ranura anomenada, o null si cap s’ha assignat.
getTexture(slotName: string): TextureBase | nullsetTexture(slotName, texture)
Assigna un TextureBase instància a la ranura anomenada.
setTexture(slotName: string, texture: TextureBase): voidClasse LambertMaterial
LambertMaterial modela la reflexió difusa amb contribucions opcionals d’ambient i emissiva. És el tipus de material que es genera habitualment en carregar fitxers OBJ amb .mtl biblioteques.
export class LambertMaterial extends MaterialProperties
A3DObject ← Material ← LambertMaterial
Properties
Assigna un material difús vermell a un node.
import { Scene, LambertMaterial } from '@aspose/3d';
import { Vector3 } from '@aspose/3d/utilities';
const scene = new Scene();
scene.open('model.obj');
const mat = new LambertMaterial('RedSurface');
mat.diffuseColor = new Vector3(1, 0, 0); // R=1, G=0, B=0
mat.ambientColor = new Vector3(0.1, 0, 0);
mat.transparency = 0;
// Assign material to the first child node's entity
const firstNode = scene.rootNode.childNodes[0];
if (firstNode && firstNode.entity) {
(firstNode.entity as any).material = mat;
}
scene.save('output.fbx');Properties
| Properties | Properties | Properties | Properties |
|---|---|---|---|
diffuseColor | `Vector3 | null` | null |
ambientColor | `Vector3 | null` | null |
emissiveColor | `Vector3 | null` | null |
transparentColor | `Vector3 | null` | null |
transparency | number | 0.0 | Factor d’opacitat en l’interval 0.0 (totalment opac) a 1.0 (totalment transparent). Limitat automàticament. |
Classe PhongMaterial
PhongMaterial estén LambertMaterial amb suport per a reflexos especulars, implementant el model clàssic d’ombreig Phong. És comú en actius FBX i COLLADA.
export class PhongMaterial extends LambertMaterialProperties
A3DObject ← Material ← LambertMaterial ← PhongMaterial
Properties
Crea un material Phong blau i lluent.
import { PhongMaterial } from '@aspose/3d';
import { Vector3 } from '@aspose/3d/utilities';
const mat = new PhongMaterial('ShinyBlue');
mat.diffuseColor = new Vector3(0, 0.2, 0.8);
mat.specularColor = new Vector3(1, 1, 1);
mat.shininess = 64;
mat.specularFactor = 0.8;
console.log(`Shininess: ${mat.shininess}`); // Shininess: 64
Properties
| Properties | Properties | Properties | Properties |
|---|---|---|---|
specularColor | `Vector3 | null` | null |
specularFactor | number | 0.0 | Multiplicador escalar per a la contribució especular. |
shininess | number | 0.0 | Exponent de brillantor Phong — valors més alts produeixen reflexos més estrets. |
reflectionColor | `Vector3 | null` | null |
reflectionFactor | number | 0.0 | Multiplicador escalar per a la contribució de reflexió. |
Classe PbrMaterial
PbrMaterial Implementa el model PBR metallic-roughness de glTF 2.0. Utilitzeu aquesta classe per a escenes que es desaran com a glTF/GLB, o quan l’actiu FBX d’origen conté materials PBR.
export class PbrMaterial extends MaterialProperties
A3DObject ← Material ← PbrMaterial
Properties
Crea un material PBR daurat i desa’l en un fitxer glTF.
import { Scene, PbrMaterial } from '@aspose/3d';
import { Vector3 } from '@aspose/3d/utilities';
import { GltfSaveOptions } from '@aspose/3d/formats/gltf';
const scene = new Scene();
scene.open('base-mesh.obj');
const gold = new PbrMaterial('Gold');
gold.albedo = new Vector3(1.0, 0.766, 0.336); // gold base color
gold.metallicFactor = 1.0;
gold.roughnessFactor = 0.3;
// Attach material to the first mesh node
const meshNode = scene.rootNode.childNodes[0];
if (meshNode && meshNode.entity) {
(meshNode.entity as any).material = gold;
}
const opts = new GltfSaveOptions();
opts.binaryMode = true;
scene.save('gold-model.glb', opts);Properties
| Properties | Properties | Properties | Properties |
|---|---|---|---|
albedo | `Vector3 | null` | null |
albedoTexture | `TextureBase | null` | null |
normalTexture | `TextureBase | null` | null |
metallicFactor | number | 0.0 | Factor metàl·lic en l’interval 0–1. 1.0 = completament metàl·lic. |
roughnessFactor | number | 0.0 | Factor d’aspresor en l’interval 0–1. 0.0 = llis com un mirall. |
metallicRoughness | `TextureBase | null` | null |
occlusionTexture | `TextureBase | null` | null |
occlusionFactor | number | 0.0 | Intensitat de l’efecte d’occlusió ambiental. |
emissiveColor | `Vector3 | null` | null |
emissiveTexture | `TextureBase | null` | null |
transparency | number | 0.0 | Factor d’opacitat en l’interval 0–1. Limitat automàticament. |
Mètodes estàtics
PbrMaterial.fromMaterial(material)
Crea un nou PbrMaterial des d’un genèric Material instància, copiant el name.
static fromMaterial(material: Material): PbrMaterial