คุณลักษณะและฟังก์ชันการทำงาน
Aspose.3D FOSS สำหรับ Python มี API กราฟฉากที่สมบูรณ์สำหรับการอ่าน, สร้าง, และเขียนเนื้อหา 3D ในหลายรูปแบบมาตรฐานอุตสาหกรรม หน้านี้บันทึกทุกพื้นที่คุณลักษณะหลักพร้อมตัวอย่างโค้ด Python ที่ทำงานได้ซึ่งใช้ API ของไลบรารีจริง.
การติดตั้งและตั้งค่า
ติดตั้งไลบรารีจาก PyPI ด้วยคำสั่งเดียว:
pip install aspose-3d-fossไม่ต้องการแพ็กเกจระบบเพิ่มเติม, ส่วนขยายเนทีฟ, หรือชุดเครื่องมือคอมไพเลอร์ใดๆ ไลบรารีเป็น Python แท้และรองรับ Python 3.7 ถึง 3.12 บน Windows, macOS, และ Linux.
เพื่อยืนยันการติดตั้ง:
from aspose.threed import Scene
scene = Scene()
print("Aspose.3D FOSS installed successfully")
print(f"Root node name: {scene.root_node.name}")คุณลักษณะและฟังก์ชันการทำงาน
การสนับสนุนรูปแบบ
Aspose.3D FOSS สำหรับ Python อ่านและเขียนรูปแบบต่อไปนี้:
| รูปแบบ | ส่วนขยาย | อ่าน | เขียน | หมายเหตุ |
|---|---|---|---|---|
| Wavefront OBJ | .obj | ใช่ | ใช่ | .mtl รองรับการโหลดวัสดุ |
| STL (binary) | .stl | ใช่ | ใช่ | ตรวจสอบการรอบกลับ (39 การทดสอบ) |
| STL (ASCII) | .stl | ใช่ | ใช่ | ตรวจสอบการรอบกลับ |
| glTF 2.0 | .gltf | ใช่ | ใช่ | กราฟซีนเต็มถูกเก็บรักษาไว้ |
| GLB (binary glTF) | .glb | ใช่ | ใช่ | คอนเทนเนอร์ไบนารีไฟล์เดียว |
| COLLADA | .dae | ใช่ | ใช่ | ลำดับชั้นของฉากและวัสดุ |
| 3MF | .3mf | ใช่ | ใช่ | รูปแบบการผลิตแบบเพิ่มชั้น |
| FBX | .fbx | บางส่วน | ไม่ | ตัวแยกโทเคนทำงาน; ตัวพาร์สมีบั๊กที่ทราบอยู่ |
การโหลด OBJ พร้อมตัวเลือก
ObjLoadOptions ควบคุมวิธีการแยกวิเคราะห์ไฟล์ OBJ:
from aspose.threed import Scene
from aspose.threed.formats import ObjLoadOptions
options = ObjLoadOptions()
options.enable_materials = True # Load accompanying .mtl file
options.flip_coordinate_system = False # Preserve original handedness
options.normalize_normal = True # Normalize vertex normals to unit length
options.scale = 1.0 # Apply a uniform scale factor at load time
scene = Scene()
scene.open("model.obj", options)
print(f"Loaded {len(scene.root_node.child_nodes)} top-level nodes")การบันทึกเป็น STL
StlSaveOptions ควบคุมการส่งออกแบบไบนารีหรือ ASCII และการตั้งค่าเฉพาะ STL อื่น ๆ:
from aspose.threed import Scene
from aspose.threed.formats import StlSaveOptions
scene = Scene.from_file("model.obj")
options = StlSaveOptions()
scene.save("output.stl", options)กราฟฉาก
เนื้อหา 3 มิติทั้งหมดจัดระเบียบเป็นต้นไม้ของ Node วัตถุ. รากของต้นไม้คือ scene.root_node. โหนดแต่ละอันสามารถมีโหนดลูกและบรรทุก Entity (mesh, camera, or light) บวกกับ Transform.
การเดินทางผ่านลำดับชั้นของฉาก
from aspose.threed import Scene
scene = Scene.from_file("model.glb")
def traverse(node, depth=0):
indent = " " * depth
entity_type = type(node.entity).__name__ if node.entity else "none"
print(f"{indent}{node.name} [{entity_type}]")
for child in node.child_nodes:
traverse(child, depth + 1)
traverse(scene.root_node)การสร้างฉากโดยโปรแกรม
from aspose.threed import Scene, Node, Entity
from aspose.threed.entities import Mesh
from aspose.threed.utilities import Vector3
scene = Scene()
root = scene.root_node
##Create a child node and position it
child = root.create_child_node("my_object")
child.transform.translation = Vector3(1.0, 0.0, 0.0)
child.transform.scaling = Vector3(2.0, 2.0, 2.0)
scene.save("constructed.glb")การตรวจสอบ GlobalTransform
GlobalTransform ให้การแปลงเชิงพื้นที่ของโหนดในโลกหลังจากสะสมการแปลงของบรรพบุรุษทั้งหมด:
from aspose.threed import Scene
scene = Scene.from_file("model.dae")
for node in scene.root_node.child_nodes:
gt = node.global_transform
print(f"Node: {node.name}")
print(f" World translation: {gt.translation}")
print(f" World scale: {gt.scale}")Mesh API
The Mesh เอนทิตีให้การเข้าถึงข้อมูลเรขาคณิตรวมถึงจุดควบคุม (เวอร์เท็กซ์), โพลิกอน, และองค์ประกอบเวอร์เท็กซ์สำหรับนอร์มอล, UV, และสี.
การอ่านเรขาคณิต Mesh
from aspose.threed import Scene
from aspose.threed.formats import ObjLoadOptions
options = ObjLoadOptions()
options.enable_materials = True
options.flip_coordinate_system = False
scene = Scene()
scene.open("model.obj", options)
for node in scene.root_node.child_nodes:
if node.entity is None:
continue
mesh = node.entity
print(f"Mesh: {node.name}")
print(f" Vertices: {len(mesh.control_points)}")
print(f" Polygons: {len(mesh.polygons)}")การเข้าถึงองค์ประกอบเวอร์เท็กซ์
องค์ประกอบเวอร์เท็กซ์บรรจุข้อมูลต่อเวอร์เท็กซ์หรือต่อโพลิกอน รายการที่พบบ่อยที่สุดคือ นอร์มอล, พิกัด UV, สีของเวอร์เท็กซ์, และกลุ่มการทำให้เรียบ:
from aspose.threed import Scene
from aspose.threed.entities import VertexElementNormal, VertexElementUV
scene = Scene.from_file("model.obj")
for node in scene.root_node.child_nodes:
if node.entity is None:
continue
mesh = node.entity
# Iterate vertex elements to find normals and UVs
for element in mesh.vertex_elements:
if isinstance(element, VertexElementNormal):
print(f" Normals count: {len(element.data)}")
elif isinstance(element, VertexElementUV):
print(f" UV count: {len(element.data)}")ระบบวัสดุ
Aspose.3D FOSS รองรับประเภทวัสดุสองประเภท: LambertMaterial (การเชดดิ้งแบบกระจาย) และ PhongMaterial (การเชดดิ้งแบบสเปคคูลาร์). ทั้งสองจะถูกโหลดโดยอัตโนมัติจากไฟล์ .mtl เมื่อใช้ ObjLoadOptions กับ enable_materials = True.
การอ่านวัสดุจาก OBJ
from aspose.threed import Scene
from aspose.threed.shading import LambertMaterial, PhongMaterial
from aspose.threed.formats import ObjLoadOptions
options = ObjLoadOptions()
options.enable_materials = True
scene = Scene()
scene.open("model.obj", options)
for node in scene.root_node.child_nodes:
mat = node.material
if mat is None:
continue
print(f"Node: {node.name}")
if isinstance(mat, PhongMaterial):
print(f" Type: Phong")
print(f" Diffuse: {mat.diffuse_color}")
print(f" Specular: {mat.specular_color}")
elif isinstance(mat, LambertMaterial):
print(f" Type: Lambert")
print(f" Diffuse: {mat.diffuse_color}")การกำหนดวัสดุโดยโปรแกรม
from aspose.threed import Scene, Node
from aspose.threed.shading import PhongMaterial
from aspose.threed.utilities import Vector3
scene = Scene.from_file("model.glb")
material = PhongMaterial()
material.diffuse_color = Vector3(0.8, 0.2, 0.2) # Red diffuse
material.specular_color = Vector3(1.0, 1.0, 1.0) # White specular
##Apply to the first mesh node
for node in scene.root_node.child_nodes:
if node.entity is not None:
node.material = material
break
scene.save("recolored.glb")ยูทิลิตี้คณิตศาสตร์
The aspose.threed.utilities โมดูลให้ประเภทคณิตศาสตร์เชิงเรขาคณิตทั้งหมดที่จำเป็นสำหรับการสร้างและตรวจสอบฉาก.
| คลาส | วัตถุประสงค์ |
|---|---|
Vector2 | 2D floating-point vector (UV coordinates) |
Vector3 | 3D double-precision vector (positions, normals) |
Vector4 | 4D double-precision vector (homogeneous coordinates) |
FVector3 | 3D single-precision vector (compact storage) |
Quaternion | การแสดงการหมุนโดยไม่มีปัญหา gimbal lock |
Matrix4 | 4×4 transformation matrix |
BoundingBox | กล่องขอบเขตที่จัดแนวตามแกนพร้อมมุมต่ำสุด/สูงสุด |
การทำงานกับการแปลง
from aspose.threed.utilities import Vector3, Quaternion, Matrix4
import math
##Build a rotation quaternion from axis-angle
axis = Vector3(0.0, 1.0, 0.0) # Y-axis
angle_rad = math.radians(45.0)
q = Quaternion.from_angle_axis(angle_rad, axis)
print(f"Quaternion: x={q.x:.4f} y={q.y:.4f} z={q.z:.4f} w={q.w:.4f}")
##Convert to rotation matrix
mat = q.to_matrix()
print(f"Rotation matrix row 0: {mat[0, 0]:.4f} {mat[0, 1]:.4f} {mat[0, 2]:.4f}")การคำนวณกล่องขอบเขต
from aspose.threed import Scene
scene = Scene.from_file("model.stl")
# NOTE: mesh.get_bounding_box() is a stub — it always returns an empty BoundingBox()
# regardless of geometry. Compute bounds manually from control_points:
for node in scene.root_node.child_nodes:
if node.entity is None:
continue
mesh = node.entity
pts = mesh.control_points # returns a copy of the vertex list
if not pts:
continue
xs = [p.x for p in pts]
ys = [p.y for p in pts]
zs = [p.z for p in pts]
print(f"Mesh: {node.name}")
print(f" Min: ({min(xs):.3f}, {min(ys):.3f}, {min(zs):.3f})")
print(f" Max: ({max(xs):.3f}, {max(ys):.3f}, {max(zs):.3f})")แอนิเมชัน
Aspose.3D FOSS มีโมเดลแอนิเมชันที่อิงตาม AnimationClip, AnimationNode, KeyFrame, และ KeyframeSequence. ข้อมูลแอนิเมชันที่เก็บไว้ในไฟล์ที่โหลด (glTF, COLLADA) สามารถเข้าถึงได้ผ่านอ็อบเจ็กต์เหล่านี้.
การอ่านคลิปแอนิเมชัน
from aspose.threed import Scene
scene = Scene.from_file("animated.glb")
for clip in scene.animation_clips:
print(f"Clip: {clip.name} ({clip.start:.2f}s – {clip.stop:.2f}s)")
for anim_node in clip.animations:
print(f" Animation node: {anim_node.name}")
for sub in anim_node.sub_animations:
print(f" Sub-animation: {sub.name}")
for bp in anim_node.bind_points:
print(f" Bind point: {bp.name}")ตัวเลือกการโหลดและบันทึก
แต่ละรูปแบบที่รองรับมีคลาสตัวเลือกที่สอดคล้องกันซึ่งควบคุมพฤติกรรมการแยกวิเคราะห์และการทำซีเรียลไลซ์.
| คลาส | รูปแบบ | คุณสมบัติหลัก |
|---|---|---|
ObjLoadOptions | OBJ | enable_materials, flip_coordinate_system, normalize_normal, scale |
StlSaveOptions | STL | โหมดการส่งออกแบบไบนารี vs. ASCII |
| (glTF ใช้ค่าเริ่มต้น) | glTF / GLB | กราฟฉากและวัสดุจะถูกเก็บรักษาโดยอัตโนมัติ |
ตัวอย่างการใช้งาน
ตัวอย่างที่ 1: การแปลงรูปแบบจาก OBJ ไปเป็น STL
แปลงไฟล์ OBJ (พร้อมวัสดุ) เป็น STL แบบไบนารี พร้อมพิมพ์สถิติเมชระหว่างกระบวนการ:
from aspose.threed import Scene
from aspose.threed.formats import ObjLoadOptions
from aspose.threed.formats import StlSaveOptions
##Load OBJ with material support
load_opts = ObjLoadOptions()
load_opts.enable_materials = True
load_opts.flip_coordinate_system = False
load_opts.normalize_normal = True
scene = Scene()
scene.open("input.obj", load_opts)
##Report what was loaded
total_vertices = 0
total_polygons = 0
for node in scene.root_node.child_nodes:
if node.entity is not None:
mesh = node.entity
total_vertices += len(mesh.control_points)
total_polygons += len(mesh.polygons)
print(f" {node.name}: {len(mesh.control_points)} vertices, {len(mesh.polygons)} polygons")
print(f"Total: {total_vertices} vertices, {total_polygons} polygons")
##Save as STL
save_opts = StlSaveOptions()
scene.save("output.stl", save_opts)
print("Saved output.stl")ตัวอย่างที่ 2: การบรรจุ glTF เป็น GLB แบบชุด
บันทึกใหม่ไดเรกทอรีของไฟล์ glTF + เทกซ์เจอร์แยกเป็นไฟล์ไบนารี GLB ที่เป็นอิสระ:
import os
from aspose.threed import Scene
input_dir = "gltf_files"
output_dir = "glb_files"
os.makedirs(output_dir, exist_ok=True)
for filename in os.listdir(input_dir):
if not filename.endswith(".gltf"):
continue
src = os.path.join(input_dir, filename)
dst = os.path.join(output_dir, filename.replace(".gltf", ".glb"))
scene = Scene.from_file(src)
scene.save(dst)
print(f"Packed {filename} -> {os.path.basename(dst)}")ตัวอย่างที่ 3: การตรวจสอบกราฟฉากและรายงานการส่งออก
เดินผ่านกราฟฉากของไฟล์ COLLADA, รวบรวมสถิติแต่ละเมช, และพิมพ์รายงานที่มีโครงสร้าง:
from aspose.threed import Scene
scene = Scene.from_file("assembly.dae")
report = []
def collect(node, path=""):
full_path = f"{path}/{node.name}" if node.name else path
if node.entity is not None:
mesh = node.entity
gt = node.global_transform
report.append({
"path": full_path,
"vertices": len(mesh.control_points),
"polygons": len(mesh.polygons),
"world_x": gt.translation.x,
"world_y": gt.translation.y,
"world_z": gt.translation.z,
})
for child in node.child_nodes:
collect(child, full_path)
collect(scene.root_node)
print(f"{'Path':<40} {'Verts':>6} {'Polys':>6} {'X':>8} {'Y':>8} {'Z':>8}")
print("-" * 78)
for entry in report:
print(
f"{entry['path']:<40} "
f"{entry['vertices']:>6} "
f"{entry['polygons']:>6} "
f"{entry['world_x']:>8.3f} "
f"{entry['world_y']:>8.3f} "
f"{entry['world_z']:>8.3f}"
)เคล็ดลับและแนวปฏิบัติที่ดีที่สุด
การเลือกรูปแบบ
- glTF 2.0 / GLB เป็นรูปแบบการแลกเปลี่ยนที่แนะนำสำหรับฉากที่มีวัสดุ, แอนิเมชัน, และโครงสร้างซับซ้อน. ควรเลือกใช้ GLB (ไบนารี) แทน glTF (ข้อความ + ไฟล์ภายนอก) เพื่อความพกพา.
- STL เป็นตัวเลือกที่เหมาะสมเมื่อผู้รับต่อไปเป็น slicer, เครื่องมือ CAD, หรือเครื่องมือใด ๆ ที่ต้องการเพียงเรขาคณิตเท่านั้น. STL ไม่บรรจุข้อมูลวัสดุหรือแอนิเมชัน.
- OBJ ได้รับการสนับสนุนอย่างกว้างขวางและเป็นตัวเลือกที่ดีเมื่อข้อมูลวัสดุต้องแลกเปลี่ยนกับเครื่องมือเก่า. ควรเก็บไฟล์ .mtl ไว้เคียงกับไฟล์ .obj เสมอ.
ระบบพิกัด
- แอปพลิเคชันต่าง ๆ ใช้แนวทางการกำหนดมือ (handedness) ที่แตกต่างกัน. ตั้งค่า
ObjLoadOptions.flip_coordinate_system = Trueเมื่อทำการนำเข้าไฟล์ OBJ จากเครื่องมือที่ใช้ระบบพิกัดขวามือ หาก pipeline ของคุณคาดหวังพิกัดซ้ายมือ, และในทางกลับกัน. - ตรวจสอบแนวแกนของแอสเซ็ตต้นทางก่อนทำการพลิกใด ๆ การพลิกสองครั้งจะทำให้รูปทรงผิดพลาด.
การทำให้เป็นมาตรฐาน
- ตั้งค่าเสมอ
ObjLoadOptions.normalize_normal = Trueเมื่อ pipeline ต่อไปคาดหวังนอร์มัลแบบหน่วย (เช่น เมื่อส่งนอร์มัลไปยังเชดเดอร์หรือทำการคำนวณแสงแบบ dot-product). นอร์มัลที่ไม่ได้ทำให้เป็นหน่วยจากไฟล์ OBJ ที่มีโครงสร้างไม่ดีจะทำให้เกิดข้อบกพร่องของแสง.
ประสิทธิภาพ
- โหลดไฟล์เพียงครั้งเดียวและแปลงกราฟฉากในหน่วยความจำแทนการโหลดใหม่จากดิสก์สำหรับแต่ละรูปแบบผลลัพธ์. การเรียกใช้เพียง
Scene.from_file()ครั้งหนึ่งตามด้วยหลายscene.save()การเรียกนั้นมีประสิทธิภาพมากกว่าการโหลดซ้ำหลายครั้ง. - เมื่อประมวลผลชุดข้อมูลขนาดใหญ่, สร้าง
ObjLoadOptionsหรือStlSaveOptionsอินสแตนซ์และใช้ซ้ำสำหรับทุกไฟล์แทนการสร้างอ็อบเจ็กต์ options ใหม่สำหรับแต่ละไฟล์.
การจัดการข้อผิดพลาด
- ห่อ
scene.open()และscene.save()เรียกในtry/exceptบล็อกเมื่อประมวลผลไฟล์ที่ untrusted หรือไฟล์ที่ user-supplied. รายงาน filename ใน exception messages เพื่อทำให้ debugging ใน batch pipelines ง่ายขึ้น.
ปัญหาทั่วไป
| ปัญหา | สาเหตุ | วิธีแก้ไข |
|---|---|---|
| Mesh ปรากฏเป็นแบบสะท้อนหลังจากโหลด | ความไม่ตรงกันของการกำหนดมือของระบบพิกัด | สลับ ObjLoadOptions.flip_coordinate_system |
| Normals มีความยาวเป็นศูนย์ | ไฟล์ต้นทางมี Normals ที่ไม่ได้ทำให้เป็นมาตรฐาน | ตั้งค่า ObjLoadOptions.normalize_normal = True |
| วัสดุไม่ได้โหลดจาก OBJ | enable_materials เป็น False (ค่าเริ่มต้น) | ตั้งค่า ObjLoadOptions.enable_materials = True |
| ฉากโหลดได้แต่โหนดทั้งหมดว่างเปล่า | ไฟล์ใช้รูปแบบ FBX | ตัวแยกวิเคราะห์ FBX อยู่ระหว่างการพัฒนา; ใช้ OBJ, STL หรือ glTF แทน |
| โมเดลมีขนาดเล็กหรือใหญ่เป็นอย่างมาก | ไฟล์ต้นทางใช้หน่วยที่ไม่ใช่เมตริก | ใช้ ObjLoadOptions.scale เพื่อแปลงเป็นหน่วยเป้าหมายของคุณ |
AttributeError เปิด mesh.polygons | เอนทิตี Node ไม่ใช่ Mesh | ป้องกันด้วย if node.entity is not None ก่อนเข้าถึงคุณสมบัติของเอนทิตี |
| ไฟล์ GLB ถูกปฏิเสธโดยตัวดู | บันทึกด้วย .gltf ส่วนขยาย | ใช้ .glb ส่วนขยายเมื่อเรียก scene.save() เพื่อเรียกใช้คอนเทนเนอร์ไบนารี |
คำถามที่พบบ่อย
เวอร์ชัน Python ใดที่รองรับ? Python 3.7, 3.8, 3.9, 3.10, 3.11, และ 3.12 ทั้งหมดรองรับ. ไลบรารีเป็น Python แท้โดยไม่มีส่วนขยายเนทีฟ, ดังนั้นจึงทำงานได้บนทุกแพลตฟอร์มที่ CPython ทำงาน.
ไลบรารีมีการพึ่งพาภายนอกหรือไม่? ไม่มี. Aspose.3D FOSS สำหรับ Python ใช้เฉพาะไลบรารีมาตรฐานของ Python เท่านั้น. มันติดตั้งเป็นคำสั่งเดียว pip install aspose-3d-foss คำสั่งโดยไม่มีขั้นตอนต่อเนื่อง.
รองรับ FBX หรือไม่? ตัวแยกโทเคน FBX ได้รับการดำเนินการและสามารถวิเคราะห์สตรีมโทเคน FBX แบบไบนารีได้ แต่ตัวสร้างกราฟฉากที่อยู่เหนือตัวแยกโทเคนมีบั๊กที่ทราบและยังไม่พร้อมสำหรับการผลิต ใช้ OBJ, STL, glTF, COLLADA หรือ 3MF สำหรับการใช้งานในผลิตภัณฑ์ที่เชื่อถือได้.
ฉันสามารถใช้ Aspose.3D FOSS ในผลิตภัณฑ์เชิงพาณิชย์ได้หรือไม่? ได้เลย. ไลบรารีนี้เผยแพร่ภายใต้สัญญาอนุญาต MIT ซึ่งอนุญาตให้ใช้ในซอฟต์แวร์ที่เป็นกรรมสิทธิ์และเชิงพาณิชย์โดยไม่มีการชำระค่าลิขสิทธิ์ ตราบใดที่มีการรวมประกาศสัญญาอนุญาตไว้.
ฉันจะรายงานบั๊กหรือขอรูปแบบใหม่ได้อย่างไร? เปิด issue ใน repository. รวมไฟล์ reproducer ขั้นต่ำและเวอร์ชันของ Python, ระบบปฏิบัติการ, และเวอร์ชันของไลบรารีจาก pip show aspose-3d-foss.
สรุปอ้างอิง API
คลาสหลัก
Scene: ตัวคอนเทนเนอร์ระดับบนสุดสำหรับฉาก 3D. จุดเริ่มต้นสำหรับopen(),from_file(), และsave().Node: โหนดต้นไม้ในกราฟฉาก. ถือentity,transform,global_transform,material,child_nodes, และname.Entity: คลาสฐานสำหรับอ็อบเจกต์ที่แนบกับโหนด (Mesh, Camera, Light).Transform: ตำแหน่งในพื้นที่ท้องถิ่น, การหมุน (Quaternion), และสเกลสำหรับโหนด.GlobalTransform: การแปลงในพื้นที่โลกแบบอ่านอย่างเดียวที่คำนวณโดยการสะสมการแปลงของโหนดบรรพบุรุษทั้งหมด.
เรขาคณิต
Mesh: โพลิกอนเมชที่มีcontrol_points(รายการเวอร์เท็กซ์) และpolygons.VertexElementNormal: เวกเตอร์ปกติต่อเวอร์เท็กซ์หรือต่อโพลิกอน.VertexElementUV: พิกัดเทกซ์เจอร์ UV ต่อเวอร์เท็กซ์.VertexElementVertexColor: ข้อมูลสีต่อเวอร์เท็กซ์.VertexElementSmoothingGroup: การกำหนดกลุ่มการทำให้เรียบของโพลิกอน.
วัสดุ
LambertMaterial: โมเดลการแรเงาแบบ Diffuse พร้อมกับdiffuse_colorและemissive_color.PhongMaterial: กำลังเพิ่มโมเดลการแรเงาแบบสเปคคูลาร์specular_colorและshininess.
ยูทิลิตี้คณิตศาสตร์ (aspose.threed.utilities)
Vector2: เวกเตอร์ 2 มิติ.Vector3: เวกเตอร์ 3 มิติแบบความแม่นยำคู่.Vector4: เวกเตอร์ 4 มิติแบบความแม่นยำคู่.FVector3: เวกเตอร์ 3 มิติแบบความแม่นยำเดี่ยว.Quaternion: ควอเทอร์เนียนการหมุนที่มีfrom_angle_axis(): และto_matrix().Matrix4: เมทริกซ์การแปลง 4×4.BoundingBox: กล่องขอบเขตที่จัดแนวตามแกนที่มีminimum: และmaximum: มุม.
แอนิเมชัน
AnimationClip: คอนเทนเนอร์ที่มีชื่อสำหรับชุดของช่องแอนิเมชันและคีย์เฟรมของพวกมัน.AnimationNode: ข้อมูลแอนิเมชันต่อโหนดภายในคลิป.KeyFrame: คีย์เฟรมเดียวที่มีเวลาและค่า.KeyframeSequence: ลำดับที่เรียงตามของคีย์เฟรมสำหรับคุณสมบัติที่เคลื่อนไหวเดียว.
ตัวเลือกการโหลด / บันทึก
ObjLoadOptions: การตั้งค่าการโหลดเฉพาะ OBJ:enable_materials,flip_coordinate_system,normalize_normal,scale.StlSaveOptions: การตั้งค่าการบันทึกเฉพาะ STL (โหมดไบนารี vs. ASCII).
กล้องและแสง
Camera: เอนทิตีกล้องที่มีการตั้งค่าการฉายภาพ, สามารถแนบกับ aNode.Light: เอนทิตีแหล่งกำเนิดแสง, สามารถแนบกับ aNode.