تحدد الرسوم المتحركة ذات الإطارات المفتاحية كيفية تغير القيمة مع مرور الوقت. على سبيل المثال، يمكنك تحديد موقع الكائن في بداية الرسوم المتحركة ومكان تحركه التالي، ثم حساب موقعه في أي نقطة بين تلك الإطارات المفتاحية. هذا مفيد لفحص منحنيات الحركة، والتحقق من توقيت الرسوم المتحركة، وتصدير القيم المأخوذة للعينات لمزيد من التحليل. Aspose.3D for Python via .NET يتيح لك أخذ عينات من تسلسل الإطارات المفتاحية عند طابع زمني محدد دون الحاجة إلى عرض مشهد ثلاثي الأبعاد. في هذا البرنامج التعليمي، ستنشئ رسومًا متحركة بسيطة للموقع، وتقييم القيم المتوسطة كل نصف ثانية، وحفظ النتائج في ملف CSV.
تثبيت Aspose.3D for Python
قم بتثبيت Aspose.3D for Python via .NET الإصدار 26.10 باستخدام pip:
pip install aspose-3d==26.10.0
هذا المثال يستخدم فقط وحدة aspose.threed.animation ووحدة csv المدمجة في Python. لا تحتاج إلى ملف GLB/GLTF أو بطاقة رسومات متوافقة مع Vulkan لأن الكود يقوم بحسابات الرسوم المتحركة بدلاً من عرض الصور.
لمعلومات النظام الأساسي والتثبيت، راجع Aspose.3D for Python documentation.
إنشاء وتقييم رسوم متحركة بإطارات رئيسية في Python
النموذج يوضح موضع X لكائن. يبدأ الموضع عند 0، ويصل إلى 10 وحدات بعد ثانيتين، ثم يعود إلى 0 بعد خمس ثوانٍ.
| الوقت (ثوانٍ) | الموضع X | الإجراء |
|---|---|---|
| 0 | 0 | ابدأ |
| 2 | 10 | الوصول إلى أقصى موضع |
| 5 | 0 | العودة إلى البداية |
القيم بين هذه الإطارات المفتاحية يتم حسابها باستخدام الاستيفاء الخطي. العينة تنشئ منحنى رسوم متحركة رقمي مستقل؛ لا تقوم بإرفاق التسلسل إلى كائن مشهد فعلي.
مثال كامل لكود بايثون
البرنامج النصي التالي ينشئ 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 هما القيم الخاصة بهما.
بين الإطارين الرئيسيين الأولين، يعطي التقييم عند 1.5 ثانية النتيجة:
[ 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 المحسوب إلى keyframe_animation.csv باستخدام وحدة 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 إلى فاصل أصغر واضبط النطاق الزمني المطلوب.
الاعتبارات العملية
العينة فقط ضمن نطاق الوقت المقصود. هذا البرنامج التعليمي يقيم الأوقات من 0 إلى 5 ثوانٍ. القيم خارج الإطارات المفتاحية المحددة تُحكم بواسطة سلوك ما قبل وما بعد الاستنتاج، وهو منفصل عن الاستيفاء بين الإطارات المفتاحية.
اختر الاستيفاء عن عمد. يولد الاستيفاء الخطي تغييرات ثابتة داخل كل مقطع. يمكن لأنماط الاستيفاء الأخرى إنشاء خصائص حركة مختلفة وقد تتطلب إعدادات إطار رئيسي إضافية. ارجع إلى مرجع واجهة برمجة تطبيقات الرسوم المتحركة قبل تغيير وضع الاستيفاء.
تمييز تقييم الرسوم المتحركة عن رسوم المشهد المتحركة. يقوم الكود بتقييم منحنى رقمي فقط. لا يقوم بتحديث موضع X لعقدة المشهد أو إنشاء رسوم متحركة مُصدرة. لتحريك كائن ثلاثي الأبعاد، يجب ربط التسلسل بخصائص متحركة مناسبة في المشهد.
لا يلزم تصيير GPU. لا يتم استدعاء Scene.render() أو أي خلفية تصيير. هذا يجعل العينة مناسبة للعمل مع قيم الرسوم المتحركة على الأجهزة التي لا تحتوي على GPU متوافق مع Vulkan.
احصل على ترخيص مؤقت مجاني
يمكنك طلب ترخيص مؤقت مجاني لمدة 30 يومًا لتقييم Aspose.3D for Python via .NET دون قيود النسخة التجريبية. اتبع دليل ترخيص Aspose.3D لتطبيق الترخيص على تطبيقك.
موارد التعلم المجانية
استكشف هذه الموارد لمتابعة العمل مع الرسوم المتحركة ثلاثية الأبعاد وتدفقات معالجة الملفات في بايثون:
- Aspose.3D for Python Developer Guide – وثائق لتحميل وإنشاء ومعالجة مشاهد ثلاثية الأبعاد.
- Aspose.3D Animation API Reference – فئات لإطارات المفاتيح، الاستيفاء، مقاطع الرسوم المتحركة، وربط الخصائص.
- Free Online 3D Applications – أدوات مستندة إلى المتصفح لمهام ملفات ثلاثية الأبعاد المدعومة.
- Aspose.3D Tutorials and Articles – أمثلة عملية إضافية للعمل مع صيغ ثلاثية الأبعاد.
الخاتمة
يمكنك استخدام KeyframeSequence.evaluate() في Aspose.3D for Python via .NET لحساب قيم الرسوم المتحركة في أوقات محددة دون تصيير نموذج. في هذا المثال، تُعرّف ثلاث إطارات رئيسية منحنى موضع X، بينما يقوم المُقَيِّم بحساب المواضع المتوسطة وتصديرها إلى CSV. لتكييف المثال، غيّر قيم الإطارات الرئيسية أو فاصل العينة. بالنسبة للرسوم المتحركة على مستوى النموذج، الخطوة التالية هي ربط منحنيات الرسوم المتحركة بخصائص المشهد وتطبيقها على الكائنات.
