كانون جي اس (برنامج)
Cannon.js هو محرك فيزيائي ثلاثي الأبعاد مكتوب بلغه الجافا سكريبت مفتوح المصدر تم إنشاؤه بواسطة Stefan "schteppe" Hedman.[3] على عكس مكتبات محركات الفيزياء المنقولة من C ++ إلى الجافا سكريبت، فإن cannon.js مكتوب بلغة الجافا سكريبت منذ البداية حيث يمكنة ذلك من الاستفادة من جميع ميزاته.[4] في مقارنة اجريت عام 2013 مع Ammo.js ، تم اكتشاف ان cannon.js «أكثر إحكاما، وأكثر قابلية للفهم، وأكثر قوة فيما يتعلق بأدائه وكذلك أسهل في الفهم»، ولكن لم يكن لديه العديد من الميزات.[5]
نوع |
3D محرك فيزيائي |
---|---|
نظام التشغيل |
OS independent |
النموذج المصدري | |
المطورون |
Stefan Hedman |
موقع الويب |
لغة البرمجة | |
---|---|
الإصدار الأخير | |
المستودع | |
الرخصة |
المميزات
عدلCannon.js يدعم الأشكال التالية: الاجسام كروى ة، مربات، اسطوانات، متعدد الوجوه محدب، الجسيمات، و heightfield . تطابق هذه المجموعة من الأشكال المجموعة التي تستخدمها محركات العرض مثل Three.js و Babylon ، لكنها ليست كاملة. على سبيل المثال، لا يكفي لـ X3DOM ، [5] تطبيق X3D الذي يسمح بتضمين رسومات ثلاثية الأبعاد في صفحات الويب دون الحاجة إلى مكون إضافي.[6]
يطبق محرك الفيزياء ديناميكيات الجسم الصلب، واكتشاف الاصطدام المنفصل، وحل قيود Gauss-Seidel.[7] يمكن إجراء محاكاة القماش [8]
يمكن استخدام Cannon.js مع Three.js و Babylon.js [9] [10] عارضات WebGL لإنشاء مشاهد ثلاثية الأبعاد قائمة على الفيزياء. يمكن استخدامه أيضًا لتوفير مزامنة فيزياء الشبكات للألعاب متعددة اللاعبين عبر الإنترنت باستخدام Lance.gg [11]
يُنشئ نموذج التعليمة البرمجية أدناه كرة على مستوى، ويخطو خطوات المحاكاة، ويطبع محاكاة المجال إلى وحدة التحكم. لاحظ أن Cannon.js يستخدم وحدات SI (متر، كيلوغرام، ثانية، إلخ).
//إعداد عالمنا
var world = new CANNON.World();
world.gravity.set(0, 0, -9.82); // m/s²
// إنشاء كرة
var radius = 1; // m
var sphereBody = new CANNON.Body({
mass: 5, // kg
position: new CANNON.Vec3(0, 0, 10), // m
shape: new CANNON.Sphere(radius)
});
world.addBody(sphereBody);
//إنشاء مستوى
var groundBody = new CANNON.Body({
mass: 0 // mass == 0 makes the body static
});
var groundShape = new CANNON.Plane();
groundBody.addShape(groundShape);
world.addBody(groundBody);
var fixedTimeStep = 1.0 / 60.0; // seconds
var maxSubSteps = 3;
//بدء حلقة المحاكاة
var lastTime;
(function simloop(time){
requestAnimationFrame(simloop);
if(lastTime !== undefined){
var dt = (time - lastTime) / 1000;
world.step(fixedTimeStep, dt, maxSubSteps);
}
console.log("Sphere z position: " + sphereBody.position.z);
lastTime = time;
})();
المراجع
عدل- ^ ا ب "Release 0.6.2". 28 مارس 2015. اطلع عليه بتاريخ 2021-02-26.
- ^ ا ب "npmjs". اطلع عليه بتاريخ 2023-03-03.
- ^ "Stefan Hedman". GitHub. مؤرشف من الأصل في 2020-12-22. اطلع عليه بتاريخ 2017-04-27.
- ^ Prall، Chandler (10 أبريل 2012). "JavaScript Physics Engines Comparison". Build New Games. مؤرشف من الأصل في 2020-12-22. اطلع عليه بتاريخ 2017-04-27.
- ^ ا ب Huber، Linda (2013). "Initial Steps for the Coupling of JavaScript Physics Engines with X3DOM". في Jan Bender؛ Jeremie Dequidt؛ Christian Duriez؛ Gabriel Zachmann (المحررون). Workshop on Virtual Reality Interaction and Physical Simulation (VRIPHYS 2013). The Eurographics Association. ص. 81–90. DOI:10.2312/PE.vriphys.vriphys13.081-090. ISBN:978-3-905674-57-6.
- ^ "Background: What is X3DOM, and what can it do for me?". official x3dom documentation. x3dom.org. مؤرشف من الأصل في 2017-07-15. اطلع عليه بتاريخ 2017-04-27.
- ^ "Branch: master. cannon.js/README.markdown". GitHub. 22 أبريل 2015. مؤرشف من الأصل في 2020-12-22. اطلع عليه بتاريخ 2017-04-27.
- ^ "Cloth physics simulation". مؤرشف من الأصل في 2020-12-22.
- ^ "Create wonderful interactive games for the web: Using webgl and a physics engine (babylon.js & cannon.js)". مؤرشف من الأصل في 2020-12-22. اطلع عليه بتاريخ 2017-02-21.
- ^ "MSDN Game Development with Babylon.js". مؤرشف من الأصل في 2020-12-22. اطلع عليه بتاريخ 2017-02-21.
- ^ "Lance source repository". مؤرشف من الأصل في 2020-10-11.
- ^ "Cannon.js - JavaScripting". www.javascripting.com. مؤرشف من الأصل في 2020-09-26. اطلع عليه بتاريخ 2020-12-22.