BAYAN.M.AZEEZ

الحركه الدائريه

12 ردود في هذا الموضوع

السلام عليكم :)

اريد ان احرك جسم بحركه دائريه مع العلم انني لا اعلم شىء عن الحركه في الاوبن جي ال :blink: .

لذلك ارجو مساعدتكم في تعلم هذا الموضوع خطوه بخطوه بحيث يقودني الى عمل حركه لجسم (مثلا sphere)بشكل دائري. :wink:

وشكرا جزيلا لكم :happy:

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

السلام عليكم

لقد وجدت في المنتدى الكثير من الامثله ولم استطع فهم معظمها لانه ليس لدي اي فكره عن الحركه ،

ولكني وجدت مثال استطعت ان افهمه ولكن لدي بعض الاسئله عليه ،ولقد قمت بطرح الاسئله على نفس الكود المرفق ،

ارجو اجابتي عنها بالاضافه الى مساعدتي في تعلم الحركه وبخاصه الدائريه كما ذكرت في الرد السابق

وشكرا لكم

:wink:

anima.cpp

تم تعديل بواسطه بيان محمد
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

ارجوا مساعدتكم بالسرعه القصوى ،الامر ضروري جدا :unsure:

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

لانشاء حركة دائرية يمكن الاعتماد على الدوال المثلثية مثل 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

* هل هناك أسئلة حول جزئيات معينة ؟

بالتوفيق .

تم تعديل بواسطه الشمري
gluOrtho2d
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

شكرا كتيييييييييييييييييييييييييييير اخي الشمري

عمل اكتر من رائع ،الله يجعله في ميزان حسناتك، :)

بس بدي اسأل عن كيفية وضع قيم glOrtho الموجوده في reshape وكيف تؤثر بدوران الشكل :huh:

اكرر شكري الكبير لك اخي الشمري

واسفه على الازعاج :happy:

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

حياك الله ،

أولا للتصحيح ،

يجب استخدام 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 لكن في أعلى الاحداثي الصادي .

فيصبح شكل النظام الاحداثي :

post-42837-12610215790822_thumb.jpg

طبعاً مع الاخذ في عين الاعتبار ، أثر الدالة glViewport ، هل هي تغطي كامل النافذة كما هي حالتنا أو لا .

ويمكن طبعاً تغيير نظام الاحداثيات أو نظام الاسقاط بشكل كامل .. حسب طبيعة البرنامج .

تم تعديل بواسطه الشمري
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

شكرا جزيلا لك ، :thumb_up:

ما شاء الله عليك ،

بالتوفيق

:ty:

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

السلام عليكم

نسيت ان اسأل عن كيف بدي اخفف من سرعة حركة الجسم؟؟؟؟

لانه حركته سريعه جدا

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

                a+= 0.1f;; // increase the angle by 0.1 (degree)

في هذا السطر، يتم زيادة الزاوية بقيمة معينة.

لتقليل السرعة عليك تقليل كمية الزيادة

ضعي 0.01 بدلا من 0.1

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

شكرا جزيلا لك اخي خلدون

بالتوفيق ان شاء الله

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

مرحبا

على فكرة حمل سواقة بطاقة الرسوميات الخاص بك إذا كانت لديك هذا إن أردت أن تثبت سرعة المعالجة و دعم الأوبن جي أل للعتاد , فغالبا ما تزداد سرعة العرض حين تصغير حجم نافذة الأوبن جي أل و العكس في حالت تكبير حجم النافذة و هذا يحدث فقط في أنظمة الوين دوز .

كانت هذه محض إضافة لا غير و تكاملا مع الأستاذ خلدون.

تم تعديل بواسطه 3ds max2010
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

من فضلك سجل دخول لتتمكن من التعليق

ستتمكن من اضافه تعليقات بعد التسجيل



سجل دخولك الان

  • يستعرض القسم حالياً   0 members

    لا يوجد أعضاء مسجلين يشاهدون هذه الصفحة .