LambertMaterial and PhongMaterial — Aspose.3D FOSS for Python API Reference

Enumerations: aspose.threed.shading (aspose-3d-foss)

Aspose.3D FOSS предоставя два класа за материали в класическата йерархия на сенкиране:

  • LambertMaterial: дифузно матово сенчиране (без спекуларност)
  • PhongMaterial: разширява Lambert със спекуларни отблясъци и блясък

И двете са зададени на Node чрез node.material. Цветовете се задават чрез Vector3(r, g, b) където компонентите са в [0.0, 1.0].


LambertMaterial

class LambertMaterial(Material):

Enumerations

A3DObjectMaterialLambertMaterial

Enumerations

LambertMaterial(name: str = None)

Enumerations

EnumerationsEnumerationsEnumerations
ambient_color`Vector3None`
diffuse_color`Vector3None`
emissive_color`Vector3None`
transparent_color`Vector3None`
transparencyfloatНиво на непрозрачност: 0.0 = напълно непрозрачен, 1.0 = напълно прозрачен. Ограничено до [0.0, 1.0].

PhongMaterial

class PhongMaterial(LambertMaterial):

Enumerations

A3DObjectMaterialLambertMaterialPhongMaterial

Наследява всичко LambertMaterial свойства и добавя:

Връща true, ако дадената точка или ограничителна кутия е напълно вътре в тази кутия. Приема обект точка {x, y, z}, Vector3 или друга BoundingBox.

EnumerationsEnumerationsEnumerations
specular_color`Vector3None`
specular_factorfloatМащаб на спекулния принос. По подразбиране 0.0.
shininessfloatЕкспонент на блясъка по Phong. По-голямо = по-тесни/по-малки светлинни акценти. По подразбиране 0.0.
reflection_color`Vector3None`
reflection_factorfloatСтепен на смесване за отражението. По подразбиране 0.0.

Примери за употреба

Lambert Matte материал

from aspose.threed import Scene
from aspose.threed.entities import Mesh
from aspose.threed.shading import LambertMaterial
from aspose.threed.utilities import Vector3, Vector4

scene = Scene()

# Build a simple triangle mesh
mesh = Mesh()
mesh.control_points.append(Vector4(0, 0, 0, 1))
mesh.control_points.append(Vector4(1, 0, 0, 1))
mesh.control_points.append(Vector4(0.5, 1, 0, 1))
mesh.create_polygon(0, 1, 2)

# Create a matte red material
mat = LambertMaterial("red-matte")
mat.diffuse_color = Vector3(0.8, 0.1, 0.1)    # R, G, B in [0, 1]
mat.ambient_color = Vector3(0.1, 0.05, 0.05)

node = scene.root_node.create_child_node("triangle", mesh)
node.material = mat

scene.save("lambert.obj")

Phong Shiny материал

from aspose.threed import Scene
from aspose.threed.entities import Mesh
from aspose.threed.shading import PhongMaterial
from aspose.threed.utilities import Vector3, Vector4

scene = Scene()

mesh = Mesh()
mesh.control_points.append(Vector4(0, 0, 0, 1))
mesh.control_points.append(Vector4(1, 0, 0, 1))
mesh.control_points.append(Vector4(0.5, 1, 0, 1))
mesh.create_polygon(0, 1, 2)

mat = PhongMaterial("shiny-blue")
mat.diffuse_color = Vector3(0.1, 0.2, 0.8)   # blue
mat.specular_color = Vector3(1.0, 1.0, 1.0)  # white highlights
mat.specular_factor = 0.5
mat.shininess = 64.0                           # tight specular lobe
mat.ambient_color = Vector3(0.05, 0.05, 0.1)

node = scene.root_node.create_child_node("mesh", mesh)
node.material = mat

scene.save("phong.obj")

Полупрозрачен материал

from aspose.threed.shading import LambertMaterial
from aspose.threed.utilities import Vector3

mat = LambertMaterial("glass")
mat.diffuse_color = Vector3(0.7, 0.9, 1.0)   # faint blue tint
mat.transparency = 0.7                         # 70% transparent

Прочетете материал от импортирана сцена

from aspose.threed import Scene
from aspose.threed.shading import LambertMaterial, PhongMaterial

scene = Scene()
scene.open("model.obj")

def inspect_node(node):
    if node.material:
        m = node.material
        kind = "Phong" if isinstance(m, PhongMaterial) else "Lambert"
        print(f"Node '{node.name}': {kind}: diffuse={m.diffuse_color}")
        if isinstance(m, PhongMaterial):
            print(f"  shininess={m.shininess}")
    for child in node.child_nodes:
        inspect_node(child)

inspect_node(scene.root_node)

PbrMaterial

class PbrMaterial(Material):

Enumerations

A3DObjectMaterialPbrMaterial

PBR (Physically Based Rendering) материал. Използва се от glTF 2.0 и други формати, поддържащи PBR. Присвоява се на Node чрез node.material.

Enumerations

PbrMaterial(name: str = None, albedo: Vector3 = None)

Enumerations

EnumerationsEnumerationsEnumerations
albedo`Vector3None`
albedo_textureвсекиТекстурна карта за канал албедо.
normal_textureвсекиТекстура на нормална карта.
metallic_factorfloatМеталически принос: 0.0 = напълно диелектрично, 1.0 = напълно метален.
roughness_factorfloatПовърхностна грубост: 0.0 = гладка/огледална, 1.0 = напълно груба.
metallic_roughnessвсякаКомбинирана металичност‑грубост текстура (glTF convention: B=metallic, G=roughness).
occlusion_textureвсякаТекстура за оклузия.
occlusion_factorfloatСила на ефекта от оклузията.
emissive_textureвсекиИзлъчваща текстура за самосветещи се области.
emissive_color`Vector3None`
transparencyfloatНиво на непрозрачност: 0.0 = напълно непрозрачен, 1.0 = напълно прозрачен.

Метод на класа

EnumerationsТип на връщанеEnumerations
PbrMaterial.from_material(material)PbrMaterialКонвертира a LambertMaterial или PhongMaterial към PbrMaterial приближение.

API справка за класа CompositeNode в aspose-note v26.3.1. Базов клас за всички възли на документа, които могат да съдържат дъщерни възли.

from aspose.threed import Scene
from aspose.threed.entities import Mesh
from aspose.threed.shading import PbrMaterial
from aspose.threed.utilities import Vector3, Vector4

scene = Scene()

mesh = Mesh()
mesh.control_points.append(Vector4(0, 0, 0, 1))
mesh.control_points.append(Vector4(1, 0, 0, 1))
mesh.control_points.append(Vector4(0.5, 1, 0, 1))
mesh.create_polygon(0, 1, 2)

mat = PbrMaterial("pbr-metal")
mat.albedo = Vector3(0.8, 0.6, 0.2)    # gold-ish base color
mat.metallic_factor = 0.9
mat.roughness_factor = 0.2

node = scene.root_node.create_child_node("mesh", mesh)
node.material = mat

scene.save("pbr.glb")

Вижте също

 Български