הערכת אנימציות בקובץ GLB או GLTF מאפשרת לך לבדוק כיצד אובייקטים תלת‑ממדיים נעים, מסתובבים ומקנים שינוי קנה מידה לאורך זמן מבלי לבצע רינדור של הסצנה. אתה יכול להשתמש בגישה זו לניתוח נתוני אנימציה, לאימות תנועות, או לייצוא טרנספורמציות לעיבוד נוסף. במדריך זה תטען מודל GLB מונפש, תבדוק את הקליפים שלו, תעריך חמש נקודות זמן, ותייצא טרנספורמציות של צמתים ל-CSV.
טעינה והערכת אנימציות GLB בפייתון
קובץ אנימציה מכיל נתוני אנימציה המשויכים לסצנה. זמני ההתחלה והסיום שלו מגדירים את התקופה שבה ניתן לבצע הערכה. זרימת העבודה היא לטעון מודל, לבחור קובץ אנימציה, ליישם אותו בזמנים ספציפיים, לבדוק את צמתות הסצנה ולייצא את ההמרות שלהן.
התקנת Aspose.3D for Python via .NET
התקן Aspose.3D for Python via .NET, המספק את ממשק ה‑API להערכת אנימציה המשמש כאן:
pip install aspose-3d==26.10.0
ראו את תיעוד ההתקנה למידע נוסף.
הערכת אנימציה וייצוא שינויי צמתים
דוגמת הקוד הבאה מעריכה את קטע האנימציה הראשון בחמישה חותמות זמן המפוזרות באופן שווה ושומרת את התרגום, הסיבוב והקנה המקומיים של כל צומת בקובץ animation_transforms.csv.
import csv
import aspose.threed as a3d
INPUT_FILE = "animated_model.glb"
OUTPUT_FILE = "animation_transforms.csv"
FRAME_COUNT = 5
def get_nodes(root):
"""Recursively collect all nodes in the scene."""
nodes = [root]
for child in root.child_nodes:
nodes.extend(get_nodes(child))
return nodes
# Load the animated model
scene = a3d.Scene.from_file(INPUT_FILE)
# Retrieve animation clips
clips = list(scene.animation_clips)
if not clips:
raise RuntimeError("No animation clips found.")
print(f"Found {len(clips)} animation clip(s).")
for i, item in enumerate(clips):
print(
f"{i}: {item.name} "
f"({item.start:.3f} to {item.stop:.3f} seconds)"
)
# Select the first clip and collect scene nodes
clip = clips[0]
nodes = get_nodes(scene.root_node)
print(f"\nEvaluating: {clip.name}")
print(f"Scene nodes: {len(nodes)}")
records = []
for i in range(FRAME_COUNT):
time = float(
clip.start +
(clip.stop - clip.start) * i / (FRAME_COUNT - 1)
)
# Apply animation at the requested time
clip.apply_to(time)
print(f"\nTimestamp: {time:.3f}s")
for index, node in enumerate(nodes):
transform = node.transform
translation = str(transform.translation)
rotation = str(transform.rotation)
scaling = str(transform.scaling)
records.append([
time,
index,
node.name or "(unnamed)",
translation,
rotation,
scaling
])
print(
f" {node.name or '(unnamed)'}: "
f"position={translation}, "
f"rotation={rotation}"
)
# Write evaluated transformations to CSV
with open(
OUTPUT_FILE, "w", newline="", encoding="utf-8"
) as file:
writer = csv.writer(file)
writer.writerow([
"Time",
"Node Index",
"Node Name",
"Translation",
"Rotation",
"Scaling"
])
writer.writerows(records)
print(f"\nSaved animation data to {OUTPUT_FILE}")
איך הערכת האנימציה עובדת
טען את סצנת ה-GLB וקבל את הקטעים שלה
Scene.from_file() טוען את מודל ה‑GLB או ה‑GLTF. האוסף scene.animation_clips מספק את הקטעים הזמינים:
scene = a3d.Scene.from_file("animated_model.glb")
clips = list(scene.animation_clips)
כל קטע חושף שם וטווח זמן בשניות דרך name, start ו-stop. ראה את הפנייה ל‑API של AnimationClip.
הפעל את האנימציה בזמנים ספציפיים
הפעולה המרכזית היא clip.apply_to(time). עבור קטע הדוגמה, שמשך שלו הוא כ‑3.708 שניות, חמשת חותמות הזמן הן:
| דוגמה | זמן (שניות) |
|---|---|
| 1 | 0.000 |
| 2 | 0.927 |
| 3 | 1.854 |
| 4 | 2.781 |
| 5 | 3.708 |
אתה יכול לשנות את FRAME_COUNT כדי לאסוף יותר דוגמאות. דוגמאות אלה מייצגות מצבי אנימציה מוערכים, ולא מסגרות תמונה מרונדרות.
קריאת תרגום, סיבוב וקנה מידה
לאחר יישום הקליפ, הסקריפט עובר על כל צמתות הסצנה וקורא:
transform.translation: המיקום המקומי של הצומת.transform.rotation: הסיבוב המקומי של הצומת.transform.scaling: הקנה המקומי של הצומת.
אלו הן המרות מקומיות, לא בהכרח קואורדינטות במרחב העולם. המרות של צומת הורה משפיעות גם על המיקום הסופי של צומת בסצנה. צמתים ללא אנימציה יכולים לשמור על אותם ערכים בכל חותמת זמן.
פלט CSV מהאנימציה
הסקריפט יוצר animation_transforms.csv. עבור הדוגמה המסופקת, הקונסול מתחיל עם:
Found 1 animation clip(s).
0: Animation_1 (0.000 to 3.708 seconds)
Evaluating: Animation_1
קובץ ה‑CSV מכיל שורה אחת לכל צומת סצנה בכל חותמת זמן מדגם והעמודות הבאות:
| עמודה | תיאור |
|---|---|
| זמן | חותמת זמן של ההערכה בשניות |
| אינדקס צומת | האינדקס של הצומת במעבר הרקורסיבי |
| שם הצומת | שם צומת הסצנה |
| הזזה | מיקום מקומי בזמן החותמת |
| סיבוב | סיבוב מקומי בזמן החותמת |
| קנה מידה | קנה מידה מקומי בזמן החותמת |
אתה יכול לפתוח את קובץ ה‑CSV באפליקציית גיליון אלקטרוני או לנתח אותו עם Python כדי להשוות בין השינויים לאורך הקטע.
מה לבדוק בעת הערכת אנימציות
קְלִיפּים מרובים. דוגמה זו מעריכה clips[0]. כדי להעריך אנימציה אחרת, בחר אינדקס שונה או קבל קְלִיפּ לפי שם באמצעות scene.get_animation_clip(name).
רזולוציית דגימה. חמש חותמות זמן מספקות סקירה בסיסית, אך עשויות לפספס תנועה מהירה. הגדל את FRAME_COUNT או בחר זמנים ספציפיים כדי לבדוק פרטים נוספים.
שלדים ויעדי שינוי צורה. לא כל אפקטי האנימציה מופיעים כשינויים בתרגום המקומי, סיבוב או קנה מידה של צומת. תהליך העבודה של CSV זה אינו קולט כל סוג של עיוות שלד או עיוות של יעד שינוי צורה.
תלותי GLTF. קבצים מבוססי טקסט .gltf עשויים להתייחס למאגרי חיצוניים וטקסטורות. שמרו קבצים אלה בנתיבים היחסיים הצפויים שלהם.
האם הערכת אנימציות GLB דורשת GPU?
דוגמה זו אינה קוראת ל-Scene.render() או למנוע הרינדור של Vulkan. היא מעריכה את מאפייני האנימציה וכותבת נתוני CSV במקום ליצור תמונות. רינדור Aspose.3D כולל דרישות חומרה, שאינן חלות על זרימת העבודה של CSV‑only של דוגמה זו.
קבל רישיון זמני בחינם
אתה יכול לבקש רישיון זמני חינמי של 30‑יום כדי להעריך Aspose.3D for Python via .NET ללא מגבלות הערכה. כדי להחיל את הרישיון ביישום Python שלך, פעל לפי מדריך הרישוי של Aspose.3D.
משאבי למידה חינמיים
חקור את המשאבים הבאים כדי ללמוד יותר על עבודה עם מודלים תלת‑ממדיים, אנימציות ותבניות קבצים נתמכות באמצעות Aspose.3D for Python via .NET:
- Aspose.3D for Python Developer Guide – למד כיצד ליצור, לטעון, לשנות ולעבד קבצי 3D.
- Free Online 3D Applications – הצג, המר ועבד מודלים תלת‑ממדיים ישירות בדפדפן שלך.
- Aspose.3D Python API Reference – חקור מחלקות, שיטות ומאפיינים זמינים.
- Aspose.3D Tutorials and Articles – מצא דוגמאות מעשיות ומדריכים לעבודה עם פורמטים של קבצי 3D.
סיכום
Aspose.3D for Python via .NET 26.10 מאפשר לך להעריך קטעי אנימציה של GLB ו‑GLTF בזמנים נבחרים עם AnimationClip.apply_to(). על‑ידי קריאת שינויי הצמתים לאחר כל הערכה, אתה יכול לבדוק תנועה ולייצא נתוני אנימציה מובנים ללא רינדור המודל. התאמת הדוגמה להערכת קטעים נוספים, הגדלת תדירות הדגימה, או ניתוח צמתים נבחרים.
