Materials — LambertMaterial, PhongMaterial, PbrMaterial
Pachet: @aspose/3d (v24.12.0)
@aspose/3d livrează trei clase concrete de material care extind clasa de bază abstractă. Material Acoperă cele trei modele de umbrire cele mai întâlnite în formatele de interschimb 3D:
LambertMaterial— difuz + ambiental + emisiv (utilizat de activele OBJ/MTL și FBX mai vechi)PhongMaterial— extinde Lambert cu proprietăți de reflexie specularăPbrMaterial— model bazat pe fizică care corespunde definiției de material glTF 2.0
Toate clasele de material sunt exportate din principalul @aspose/3d punct de intrare.
import { LambertMaterial, PhongMaterial, PbrMaterial } from '@aspose/3d';Clasa Material (bază abstractă)
Material este clasa de bază abstractă pentru toate materialele. Extinde A3DObject, furnizând name proprietatea și API-ul pentru sloturile de textură.
export class Material extends A3DObjectImageRenderOptions
| ImageRenderOptions | ImageRenderOptions | ImageRenderOptions |
|---|---|---|
name | string | Numele materialului așa cum apare în graficul scenei și în rezultatul exportului. |
ImageRenderOptions
getTexture(slotName)
Returnează TextureBase atribuit slotului numit, sau null dacă nu a fost atribuită niciuna.
getTexture(slotName: string): TextureBase | nullsetTexture(slotName, texture)
Atribuie un TextureBase instanță la slotul numit.
setTexture(slotName: string, texture: TextureBase): voidClasa LambertMaterial
LambertMaterial modelează reflexia difuză cu contribuții opționale ambientale și emisie. Este tipul de material produs în mod obișnuit la încărcarea fișierelor OBJ cu .mtl biblioteci.
export class LambertMaterial extends MaterialImageRenderOptions
A3DObject ← Material ← LambertMaterial
ImageRenderOptions
Atribuiți un material difuz roșu unui nod.
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');ImageRenderOptions
| ImageRenderOptions | ImageRenderOptions | ImageRenderOptions | ImageRenderOptions |
|---|---|---|---|
diffuseColor | `Vector3 | null` | null |
ambientColor | `Vector3 | null` | null |
emissiveColor | `Vector3 | null` | null |
transparentColor | `Vector3 | null` | null |
transparency | number | 0.0 | Factor de opacitate în intervalul 0.0 (complet opac) până la 1.0 (complet transparent). Limitat automat. |
Clasa PhongMaterial
PhongMaterial extinde LambertMaterial cu suport pentru evidențiere speculară, implementând modelul clasic de umbrire Phong. Este comun în activele FBX și COLLADA.
export class PhongMaterial extends LambertMaterialImageRenderOptions
A3DObject ← Material ← LambertMaterial ← PhongMaterial
ImageRenderOptions
Creați un material Phong albastru strălucitor.
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
ImageRenderOptions
| ImageRenderOptions | ImageRenderOptions | ImageRenderOptions | ImageRenderOptions |
|---|---|---|---|
specularColor | `Vector3 | null` | null |
specularFactor | number | 0.0 | Multiplicator scalar pentru contribuția speculară. |
shininess | number | 0.0 | Exponent de strălucire Phong — valori mai mari produc evidențieri mai strânse. |
reflectionColor | `Vector3 | null` | null |
reflectionFactor | number | 0.0 | Multiplicator scalar pentru contribuția reflexiei. |
Clasa PbrMaterial
PbrMaterial implementează modelul PBR metalic-roughness glTF 2.0. Folosiți această clasă pentru scenele care vor fi salvate ca glTF/GLB sau când asset-ul sursă FBX conține materiale PBR.
export class PbrMaterial extends MaterialImageRenderOptions
A3DObject ← Material ← PbrMaterial
ImageRenderOptions
Construiți un material PBR de aur și salvați-l într-un fișier 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);ImageRenderOptions
| ImageRenderOptions | ImageRenderOptions | ImageRenderOptions | ImageRenderOptions |
|---|---|---|---|
albedo | `Vector3 | null` | null |
albedoTexture | `TextureBase | null` | null |
normalTexture | `TextureBase | null` | null |
metallicFactor | number | 0.0 | Factor metalic în intervalul 0–1. 1.0 = complet metalic. |
roughnessFactor | number | 0.0 | Factorul de rugozitate în intervalul 0–1. 0.0 = neted ca o oglindă. |
metallicRoughness | `TextureBase | null` | null |
occlusionTexture | `TextureBase | null` | null |
occlusionFactor | number | 0.0 | Intensitatea efectului de ocluzie ambientală. |
emissiveColor | `Vector3 | null` | null |
emissiveTexture | `TextureBase | null` | null |
transparency | number | 0.0 | Factorul de opacitate în intervalul 0–1. Limitat automat. |
Metode statice
PbrMaterial.fromMaterial(material)
Creează un nou PbrMaterial de la un generic Material instanță, copierea name.
static fromMaterial(material: Material): PbrMaterial