คุณลักษณะและฟังก์ชันการทำงาน

คุณลักษณะและฟังก์ชันการทำงาน

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 โมดูลให้ประเภทคณิตศาสตร์เชิงเรขาคณิตทั้งหมดที่จำเป็นสำหรับการสร้างและตรวจสอบฉาก.

คลาสวัตถุประสงค์
Vector22D floating-point vector (UV coordinates)
Vector33D double-precision vector (positions, normals)
Vector44D double-precision vector (homogeneous coordinates)
FVector33D single-precision vector (compact storage)
Quaternionการแสดงการหมุนโดยไม่มีปัญหา gimbal lock
Matrix44×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}")

ตัวเลือกการโหลดและบันทึก

แต่ละรูปแบบที่รองรับมีคลาสตัวเลือกที่สอดคล้องกันซึ่งควบคุมพฤติกรรมการแยกวิเคราะห์และการทำซีเรียลไลซ์.

คลาสรูปแบบคุณสมบัติหลัก
ObjLoadOptionsOBJenable_materials, flip_coordinate_system, normalize_normal, scale
StlSaveOptionsSTLโหมดการส่งออกแบบไบนารี 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
วัสดุไม่ได้โหลดจาก OBJenable_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: เอนทิตีกล้องที่มีการตั้งค่าการฉายภาพ, สามารถแนบกับ a Node.
  • Light: เอนทิตีแหล่งกำเนิดแสง, สามารถแนบกับ a Node.
 ภาษาไทย