الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

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

بدأه بيان محمد في 15 ديسمبر 2009 · 11 رد · 2,896 مشاهدة · في OpenGL
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

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

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

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

#2

السلام عليكم

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

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

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

وشكرا لكم

:wink:

anima.cpp

تم تعديل هذه المشاركة بواسطة بيان محمد في 15 ديسمبر 2009 في 00:55

#3

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

#4

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

logo1.png تطبيق طمأنينة ، نسخة بيتا على أندرويد

عبدالله الشمّري - Al-Shammari

CodingAlone.com

twitter @abshammeri

abshammeri AT gmail.com

github : abshammeri

#5

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

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

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

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

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

#6

حياك الله ،

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

يجب استخدام 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 ، هل هي تغطي كامل النافذة كما هي حالتنا أو لا .

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

تم تعديل هذه المشاركة بواسطة الشمري في 17 ديسمبر 2009 في 06:48

logo1.png تطبيق طمأنينة ، نسخة بيتا على أندرويد

عبدالله الشمّري - Al-Shammari

CodingAlone.com

twitter @abshammeri

abshammeri AT gmail.com

github : abshammeri

#7

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

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

بالتوفيق

:ty:

#8

السلام عليكم

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

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

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

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

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

ضعي 0.01 بدلا من 0.1

#10

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

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

#11

مرحبا

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

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

تم تعديل هذه المشاركة بواسطة 3ds max2010 في 19 ديسمبر 2009 في 15:37

تخيل, هل سيكون مستقبل الأوبن جي أل مع البشرية هكذا

future.jpg
#12

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

مواضيع مشابهة