انیمیشن‌های فریم کلیدی تعریف می‌کنند که یک مقدار چگونه در طول زمان تغییر می‌کند. به عنوان مثال، می‌توانید مشخص کنید که یک شیء در ابتدای انیمیشن در کجا باشد و سپس به کجا حرکت کند، سپس موقعیت آن را در هر نقطه‌ای بین آن فریم‌های کلیدی محاسبه کنید. این برای بررسی منحنی‌های حرکت، بررسی زمان‌بندی انیمیشن و استخراج مقادیر نمونه‌برداری‌شده برای تحلیل بیشتر مفید است. Aspose.3D for Python via .NET به شما امکان می‌دهد توالی فریم کلیدی را در یک زمان‌مهر مشخص بدون رندر کردن صحنه 3D نمونه‌برداری کنید. در این آموزش، یک انیمیشن موقعیت ساده ایجاد می‌کنید، مقادیر درون‌یابی‌شده آن را هر نیم‌ثانیه ارزیابی می‌کنید و نتایج را در یک فایل CSV ذخیره می‌کنید.

نصب Aspose.3D for Python

نصب Aspose.3D for Python via .NET نسخه ۲۶.۱۰ با استفاده از pip:

pip install aspose-3d==26.10.0

این مثال فقط از ماژول aspose.threed.animation و ماژول داخلی csv پایتون استفاده می‌کند. شما نیازی به فایل GLB/GLTF یا کارت گرافیک سازگار با Vulkan ندارید زیرا کد محاسبات انیمیشن را انجام می‌دهد نه رندر تصویر.

برای اطلاعات پلتفرم و نصب، به مستندات Aspose.3D for Python مراجعه کنید.

ایجاد و ارزیابی یک انیمیشن فریم کلیدی در پایتون

این مثال موقعیت X یک شیء را مدل می‌کند. موقعیت از 0 شروع می‌شود، پس از دو ثانیه به 10 واحد می‌رسد و پس از پنج ثانیه به 0 باز می‌گردد.

زمان (ثانیه)موقعیت Xعمل
00شروع
210رسیدن به حداکثر موقعیت
50بازگشت به شروع

مقدارهای بین این کلید‑فریم‌ها با استفاده از درون‌یابی خطی محاسبه می‌شوند. این نمونه یک منحنی انیمیشن عددی مستقل ایجاد می‌کند؛ اما این توالی را به شیء صحنه واقعی وصل نمی‌کند.

مثال کامل کد پایتون

اسکریپت زیر یک KeyframeSequence ایجاد می‌کند، سه کی‌فریم اضافه می‌نماید، یازده بازه زمانی را ارزیابی می‌کند، مقادیر کی‌فریم‌ها را اعتبارسنجی می‌کند و نتایج را به keyframe_animation.csv صادر می‌نماید.

import csv

from aspose.threed.animation import (
    KeyframeSequence,
    Interpolation
)

OUTPUT_FILE = "keyframe_animation.csv"

# Create an animation curve
sequence = KeyframeSequence("PositionX")

# Define keyframes using linear interpolation
sequence.add(0.0, 0.0, Interpolation.LINEAR)
sequence.add(2.0, 10.0, Interpolation.LINEAR)
sequence.add(5.0, 0.0, Interpolation.LINEAR)

# Display the defined keyframes
print("Keyframes:")

for key in sequence.key_frames:
    print(
        f"Time: {key.time:.2f}s, "
        f"Value: {key.value:.2f}"
    )

# Evaluate the animation every 0.5 seconds
start_time = 0.0
end_time = 5.0
step = 0.5

records = []

print("\nEvaluated animation values:")
print("---------------------------")
print("Time (s) | X Position")

sample_count = int(
    round((end_time - start_time) / step)
) + 1

for i in range(sample_count):
    time = float(start_time + i * step)

# Evaluate the animation at this timestamp
    value = float(sequence.evaluate(time))

records.append([time, value])

print(f"{time:8.2f} | {value:10.3f}")

# Verify values at known timestamps
assert abs(sequence.evaluate(0.0) - 0.0) < 1e-5
assert abs(sequence.evaluate(2.0) - 10.0) < 1e-5
assert abs(sequence.evaluate(5.0) - 0.0) < 1e-5

# Export animation data to CSV
with open(
    OUTPUT_FILE,
    "w",
    newline="",
    encoding="utf-8"
) as file:

writer = csv.writer(file)

writer.writerow([
        "Time (seconds)",
        "X Position"
    ])

writer.writerows(records)

print(f"\nAnimation data saved to {OUTPUT_FILE}")
print("Keyframe validation passed.")

درک نحوه عملکرد ارزیابی فریم کلیدی

تعریف توالی فریم کلیدی

کلاس KeyframeSequence یک منحنی عددی را نشان می‌دهد که مقادیر آن در زمان‌های خاص تعریف شده‌اند. این خط یک دنباله به نام PositionX ایجاد می‌کند:

sequence = KeyframeSequence("PositionX")

نام به شناسایی توالی کمک می‌کند. این توالی به‌طور خودکار به مش یا ویژگی گره متصل نمی‌شود. برای جزئیات، به مرجع API KeyframeSequence مراجعه کنید.

افزودن فریم‌های کلیدی با درون‌یابی خطی

هر فراخوانی به add() یک زمان‌مهر، یک مقدار و یک نوع درون‌یابی را فراهم می‌کند:

sequence.add(0.0, 0.0, Interpolation.LINEAR)
sequence.add(2.0, 10.0, Interpolation.LINEAR)
sequence.add(5.0, 0.0, Interpolation.LINEAR)

Interpolation.LINEAR به توالی می‌گوید تا مقادیر میانی را به‌صورت متناسب بین فریم‌های کلیدی محاسبه کند. در نتیجه، مقدار به‌صورت پیوسته از 0 تا 10 در طول دو ثانیه اول افزایش می‌یابد و سپس به‌صورت پیوسته از 10 به 0 در طول سه ثانیه بعدی کاهش می‌یابد.

محاسبه مقدار در یک زمان‌مهر

عملیات کلیدی این است:

value = sequence.evaluate(1.5)

در این مثال، نتیجهٔ مورد انتظار در 1.5 ثانیه 7.5 است. درون‌یابی خطی از این فرمول پیروی می‌کند:

[ v(t) = v_0 + \frac{t - t_0}{t_1 - t_0}(v_1 - v_0) ]

در اینجا، t زمان درخواست‌شده است، t0 و t1 زمان‌های فریم‌های کلیدی اطراف هستند و v0 و v1 مقادیر مربوط به آن‌ها هستند.

بین دو فریم کلیدی اول، ارزیابی در ۱٫۵ ثانیه به این نتیجه می‌رسد:

[ v(1.5) = 0 + \frac{1.5 - 0}{2 - 0}(10 - 0) = 7.5 ]

شما نیازی به پیاده‌سازی این فرمول به‌صورت دستی ندارید. KeyframeSequence.evaluate() محاسبه را بر اساس تنظیمات درون‌یابی توالی انجام می‌دهد.

بررسی مقادیر ارزیابی‌شده

برای فریم‌های کلیدی نمونه، خروجی به‌صورت زیر است:

Keyframes:
Time: 0.00s, Value: 0.00
Time: 2.00s, Value: 10.00
Time: 5.00s, Value: 0.00

Evaluated animation values:
---------------------------
Time (s) | X Position
    0.00 |      0.000
    0.50 |      2.500
    1.00 |      5.000
    1.50 |      7.500
    2.00 |     10.000
    2.50 |      8.333
    3.00 |      6.667
    3.50 |      5.000
    4.00 |      3.333
    4.50 |      1.667
    5.00 |      0.000

Animation data saved to keyframe_animation.csv
Keyframe validation passed.

دستورات assert مقادیر را در سه زمان‌مهر کلید‑فریم تعریف‌شده بررسی می‌کنند. آن‌ها به‌جای برابری مستقیم عدد شناور، از یک تحمل کوچک استفاده می‌کنند.

تغییر مقادیر بین فریم‌های کلیدی تأیید می‌کند که توالی در طول بازه زمانی خود نمونه‌برداری می‌شود.

صادر کردن مقادیر فریم کلیدی به CSV

پس از ارزیابی توالی، اسکریپت زمان و موقعیت X محاسبه‌شده را با استفاده از ماژول csv پایتون در فایل keyframe_animation.csv می‌نویسد. فایل به شکل زیر شروع می‌شود:

Time (seconds),X Position
0.0,0.0
0.5,2.5
1.0,5.0
1.5,7.5
2.0,10.0

می‌توانید این CSV را در یک برنامه صفحه‌گسترده باز کنید، منحنی حرکت حاصل را رسم کنید، یا آن را برای تجزیه و تحلیل به Python برگردانید. برای به‌دست آوردن نتایج دقیق‌تر، مقدار step را از 0.5 به بازه‌ای کوچکتر کاهش دهید و بازه زمانی موردنظر را تنظیم کنید.

ملاحظات عملی

نمونه فقط در بازه زمانی مورد نظر. این آموزش زمان‌ها را از ۰ تا ۵ ثانیه ارزیابی می‌کند. مقادیر خارج از فریم‌های کلیدی تعریف‌شده توسط رفتار پیش‌اکستراپولاسیون و پس‌اکستراپولاسیون کنترل می‌شوند، که جدا از درون‌یابی بین فریم‌های کلیدی است.

درون‌یابی را به‌دقت انتخاب کنید. درون‌یابی خطی تغییرات ثابت را در هر بخش تولید می‌کند. سبک‌های دیگر درون‌یابی می‌توانند ویژگی‌های حرکتی متفاوتی ایجاد کنند و ممکن است به تنظیمات فریم کلیدی اضافی نیاز داشته باشند. قبل از تغییر حالت درون‌یابی، به مستندات API انیمیشن مراجعه کنید.

ارزیابی انیمیشن را از انیمیشن صحنه متمایز کنید. کد فقط یک منحنی عددی را ارزیابی می‌کند. این کد موقعیت X یک گره صحنه را به‌روزرسانی نمی‌کند و انیمیشن رندر شده‌ای ایجاد نمی‌کند. برای جابجایی یک شیء سه‌بعدی، توالی باید به یک ویژگی انیمیشنی مناسب در صحنه متصل شود.

رندرینگ GPU لازم نیست. هیچ فراخوانی به Scene.render() یا یک بک‌اند رندرینگ انجام نمی‌شود. این باعث می‌شود نمونه برای کار با مقادیر انیمیشن بر روی ماشین‌هایی که GPU سازگار با Vulkan ندارند، مناسب باشد.

دریافت یک لایسنس موقت رایگان

You can درخواست یک لایسنس موقت 30 روزه رایگان to evaluate Aspose.3D for Python via .NET without trial limitations. Follow the راهنمای مجوز Aspose.3D to apply the license to your application.

منابع آموزشی رایگان

این منابع را بررسی کنید تا به کار با انیمیشن‌های سه‌بعدی و جریان‌های پردازش فایل در پایتون ادامه دهید:

نتیجه‌گیری

می‌توانید از KeyframeSequence.evaluate() در Aspose.3D for Python via .NET برای محاسبه مقادیر انیمیشن در زمان‌های خاص بدون رندر کردن مدل استفاده کنید. در این مثال، سه کی‌فریم یک منحنی موقعیت X را تعریف می‌کنند، در حالی که ارزیاب موقعیت‌های میانی را محاسبه کرده و به CSV صادر می‌کند. برای سازگار کردن مثال، مقادیر کی‌فریم یا بازه نمونه‌برداری را تغییر دهید. برای انیمیشن در سطح مدل، گام بعدی بستن منحنی‌های انیمیشن به ویژگی‌های صحنه و اعمال آن‌ها بر روی اشیاء است.

بیشتر بخوانید