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
A3DObject → Material → LambertMaterial
Enumerations
LambertMaterial(name: str = None)Enumerations
| Enumerations | Enumerations | Enumerations |
|---|---|---|
ambient_color | `Vector3 | None` |
diffuse_color | `Vector3 | None` |
emissive_color | `Vector3 | None` |
transparent_color | `Vector3 | None` |
transparency | float | Ниво на непрозрачност: 0.0 = напълно непрозрачен, 1.0 = напълно прозрачен. Ограничено до [0.0, 1.0]. |
PhongMaterial
class PhongMaterial(LambertMaterial):Enumerations
A3DObject → Material → LambertMaterial → PhongMaterial
Наследява всичко LambertMaterial свойства и добавя:
Връща true, ако дадената точка или ограничителна кутия е напълно вътре в тази кутия. Приема обект точка {x, y, z}, Vector3 или друга BoundingBox.
| Enumerations | Enumerations | Enumerations |
|---|---|---|
specular_color | `Vector3 | None` |
specular_factor | float | Мащаб на спекулния принос. По подразбиране 0.0. |
shininess | float | Експонент на блясъка по Phong. По-голямо = по-тесни/по-малки светлинни акценти. По подразбиране 0.0. |
reflection_color | `Vector3 | None` |
reflection_factor | float | Степен на смесване за отражението. По подразбиране 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
A3DObject → Material → PbrMaterial
PBR (Physically Based Rendering) материал. Използва се от glTF 2.0 и други формати, поддържащи PBR. Присвоява се на Node чрез node.material.
Enumerations
PbrMaterial(name: str = None, albedo: Vector3 = None)Enumerations
| Enumerations | Enumerations | Enumerations |
|---|---|---|
albedo | `Vector3 | None` |
albedo_texture | всеки | Текстурна карта за канал албедо. |
normal_texture | всеки | Текстура на нормална карта. |
metallic_factor | float | Металически принос: 0.0 = напълно диелектрично, 1.0 = напълно метален. |
roughness_factor | float | Повърхностна грубост: 0.0 = гладка/огледална, 1.0 = напълно груба. |
metallic_roughness | всяка | Комбинирана металичност‑грубост текстура (glTF convention: B=metallic, G=roughness). |
occlusion_texture | всяка | Текстура за оклузия. |
occlusion_factor | float | Сила на ефекта от оклузията. |
emissive_texture | всеки | Излъчваща текстура за самосветещи се области. |
emissive_color | `Vector3 | None` |
transparency | float | Ниво на непрозрачност: 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")