السلام عليكم :)
اريد ان احرك جسم بحركه دائريه مع العلم انني لا اعلم شىء عن الحركه في الاوبن جي ال :blink: .
لذلك ارجو مساعدتكم في تعلم هذا الموضوع خطوه بخطوه بحيث يقودني الى عمل حركه لجسم (مثلا sphere)بشكل دائري. :wink:
وشكرا جزيلا لكم :happy:
السلام عليكم :)
اريد ان احرك جسم بحركه دائريه مع العلم انني لا اعلم شىء عن الحركه في الاوبن جي ال :blink: .
لذلك ارجو مساعدتكم في تعلم هذا الموضوع خطوه بخطوه بحيث يقودني الى عمل حركه لجسم (مثلا sphere)بشكل دائري. :wink:
وشكرا جزيلا لكم :happy:
السلام عليكم
لقد وجدت في المنتدى الكثير من الامثله ولم استطع فهم معظمها لانه ليس لدي اي فكره عن الحركه ،
ولكني وجدت مثال استطعت ان افهمه ولكن لدي بعض الاسئله عليه ،ولقد قمت بطرح الاسئله على نفس الكود المرفق ،
ارجو اجابتي عنها بالاضافه الى مساعدتي في تعلم الحركه وبخاصه الدائريه كما ذكرت في الرد السابق
وشكرا لكم
:wink:
تم تعديل هذه المشاركة بواسطة بيان محمد في 15 ديسمبر 2009 في 00:55
ارجوا مساعدتكم بالسرعه القصوى ،الامر ضروري جدا :unsure:
لانشاء حركة دائرية يمكن الاعتماد على الدوال المثلثية مثل Sin و Cos ، أو يمكن الاكتفاء بدالة glRotatef في OpenGL .
يمكن قراءة هذه المواضيع :
http://www.arabteam2...howtopic=179728
http://www.arabteam2...showtopic=83823
ولكن يجب ان يعرف من يقرأ الموضوع ، عن المصفوفات ودورها في برمجة الرسوميات ،
بعدها يمكنه وبسهولة تدوير شكل حول مركزه أو حول نقطة معينة - حول شكل معين - .
أبسط كود لتدوير مربع حول مركزه ( علماً أن المربع مرسوم ابتداءً من نقطة الأصل - ولتكن نقطة الأصل في منتصف النافذة ) :
#include<GL/glut.h>
void reshape(int w, int h) {
glViewport(0, 0, w, h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
// change projection matrix ( change the coordinate system )
// the center point is in the middle of the window
gluOrtho2d(-w/2.0f , w/2.0f , -h/2.0f , h/2.0f);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}
static float a = 0 ;
void Render()
{
glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
a+= 0.1f;; // increase the angle by 0.1 (degree)
glLoadIdentity();
// x = 0 , y = 0 , z = 1 -> so ,it will rotate around the z axis of the shape ( or around the center point of the shape )
glRotatef(a,0,0,1);
glRectf(-50,-50,50,50);
glutSwapBuffers();
}
void main(int argc, char **argv) {
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA);
glutInitWindowPosition(100,100);
glutInitWindowSize(320,320);
glutCreateWindow("arab team - glut ");
glutDisplayFunc(Render);
glutIdleFunc(Render);
glutReshapeFunc(reshape);
glutMainLoop();
}* لم اجرب الكود - ممكن توجد أخطاء .
* الكود السابق أبسط مايكون ، اذا لم يكن مفهوماً ، فهذا يعني أن الأساسيات ليس كما ينبغي ، لذلك ، يجب قراءة مقالات عن Matrix in OpenGL ومعرفة كيف تعمل . يمكن البحث أيضاً عن Transformation in OpenGL ، وبعد التأكد من فهم الفكرة ، يمكن الانتقال إلى اجراء تطبيقات في OpenGL .
في هذا الموضوع ( فهرس ) للمقالات التي تخص الرياضيات - المصفوفات - ، وهي واضحة وبسيطة .
http://www.arabteam2...howtopic=117856
او يمكن قراءة مقال للأخ خلدون ، وهو مكتوب بطريقة جيدة ( شرح للمفاهيم ) /
http://www.arabteam2...howtopic=192774
* هل هناك أسئلة حول جزئيات معينة ؟
بالتوفيق .
تم تعديل هذه المشاركة بواسطة الشمري في 17 ديسمبر 2009 في 06:36 — السبب: gluOrtho2d
تطبيق طمأنينة ، نسخة بيتا على أندرويد
عبدالله الشمّري - Al-Shammari
twitter @abshammeri
abshammeri AT gmail.com
github : abshammeri
شكرا كتيييييييييييييييييييييييييييير اخي الشمري
عمل اكتر من رائع ،الله يجعله في ميزان حسناتك، :)
بس بدي اسأل عن كيفية وضع قيم glOrtho الموجوده في reshape وكيف تؤثر بدوران الشكل :huh:
اكرر شكري الكبير لك اخي الشمري
واسفه على الازعاج :happy:
حياك الله ،
أولا للتصحيح ،
يجب استخدام gluOrtho2d بدلا من glOrtho ، اذا أردنا تجاهل اخر بارمترين .
gluOrtho2d : تغير من محتويات مصفوفة الاسقاط Projection Matrix ، بحيث يكون الاسقاط عمودي ، يعني صالح كثيراً لمعظم الألعاب الثنائية البعد .
ولكن ولتبسيط فكرته ، يمكن أن نتخيلها كدالة تعين نظام الاحداثيات المتبع - هو في الاخير يقوم بهذا الشيء - !
تسأل نفسك هذه الأسئلة :
- هل اللعبة ثنائية البعد ، اذا استخدم gluOrtho2d بدلاً من gluPerspective الخاصة بالاسقاط المنظوري ( الذي يعطي للعبة عمق واضح ، لتصبح ثلاثية الابعاد ) .
-ماهي بارمترات - معاملات - هذه الدالة ؟
gluOrtho2d (left,right,bottom,top(
left : هي قيمة أقصى نقطة على يمين النافذة ( في مثالنا الحالي ، هي w/2- ) .. أين 320/2- == 160- .. وبالتالي أي نقطة أقل من 160- لن تظهر .. حيث أن هذه النقطة هي أقصى نقطة على اليسار في الاحداثي السيني في نظام احداثياتنا .. ممكن تظهر على النافذة .
right نفس left لكن يمين .
bottom :هي قيمة أقصى نقطة في أسفل النافذة ( في مثالنا الحالي ، هي h/2- ) .. أين 320/2- == 160- .. وبالتالي أي نقطة أقل من 160- لن تظهر .. حيث أن هذه النقطة هي أقصى نقطة في الأسفل في الاحداثي الصادي في نظام احداثياتنا .. ممكن تظهر على النافذة .
top : مثل bottom لكن في أعلى الاحداثي الصادي .
فيصبح شكل النظام الاحداثي :
طبعاً مع الاخذ في عين الاعتبار ، أثر الدالة glViewport ، هل هي تغطي كامل النافذة كما هي حالتنا أو لا .
ويمكن طبعاً تغيير نظام الاحداثيات أو نظام الاسقاط بشكل كامل .. حسب طبيعة البرنامج .
تم تعديل هذه المشاركة بواسطة الشمري في 17 ديسمبر 2009 في 06:48
تطبيق طمأنينة ، نسخة بيتا على أندرويد
عبدالله الشمّري - Al-Shammari
twitter @abshammeri
abshammeri AT gmail.com
github : abshammeri
شكرا جزيلا لك ، :thumb_up:
ما شاء الله عليك ،
بالتوفيق
:ty:
السلام عليكم
نسيت ان اسأل عن كيف بدي اخفف من سرعة حركة الجسم؟؟؟؟
لانه حركته سريعه جدا
a+= 0.1f;; // increase the angle by 0.1 (degree)
في هذا السطر، يتم زيادة الزاوية بقيمة معينة.
لتقليل السرعة عليك تقليل كمية الزيادة
ضعي 0.01 بدلا من 0.1
شكرا جزيلا لك اخي خلدون
بالتوفيق ان شاء الله
مرحبا
على فكرة حمل سواقة بطاقة الرسوميات الخاص بك إذا كانت لديك هذا إن أردت أن تثبت سرعة المعالجة و دعم الأوبن جي أل للعتاد , فغالبا ما تزداد سرعة العرض حين تصغير حجم نافذة الأوبن جي أل و العكس في حالت تكبير حجم النافذة و هذا يحدث فقط في أنظمة الوين دوز .
كانت هذه محض إضافة لا غير و تكاملا مع الأستاذ خلدون.
تم تعديل هذه المشاركة بواسطة 3ds max2010 في 19 ديسمبر 2009 في 15:37
تخيل, هل سيكون مستقبل الأوبن جي أل مع البشرية هكذا

شكرا جزيلا لك اخي 3ds max2010