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

تحريك الاجسام ..

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

مساء الخير

اخواني لا هنتوا عندي استفسار عن تحريك الاجسام..

لنفرض قمت برسم مستطيل واريدة كل مرة يعمل ازاحة بمقدار معين ع محورy لنفرض 0.001 ولة هذة الابعاد..

float y=0;

glColor3f (0.0, 1.0, 0.0);

glLoadIdentity ();

glTranslatef(0,y,0);

glBegin(GL_POLYGON);

glVertex2f(.1, .25);

glVertex2f(-.1, .25);

glVertex2f(-.1, -.25);

glVertex2f(.1, -.25);

glEnd();

ثم بعد ذلك نعرف انة لجعل الجسم يتحرك باستمرار نستخدم دالة:

glutIdleFunc()

ونمرر له الدالة اللي فيها خصائص الرسمة..

لو اريد بعد مايتحرك هذا المستطيل ويوصل الى أعلى النافذة..أريدة يرجع يظهر من أسفل النافذة..

هذا اللي استخدمتة..لكن ماتطلع النتيجة معي:

void TransFunction()

{

y +=.001;

==== باعتبار انة حجم النافذة 700*700

if(y>=700)

y=0;

glutPostRedisplay();

}

كيف اجعل حركة المستطيل كما ذكرت وهو (بعد مايتحرك هذا المستطيل ويوصل الى أعلى النافذة..أريدة يرجع يظهر من أسفل النافذة)...

ارجو المساعدة ..فتح الله عليكم وأسعدكم في الدارين..

تم تعديل هذه المشاركة بواسطة وشوشونة في 28 أبريل 2011 في 16:40

#2

هنا مثال بسيط لعمليه التحريك :

#include<windows.h>
#include<GL/gl.h> 
#include<GL/glu.h>
#include<GL/glut.h>
#include<math.h>
#include<time.h>
#pragma comment (lib,"OpenGL32.lib")
#pragma comment (lib,"glu32.lib")
#pragma comment (lib,"glut32.lib")
int width  = 700;
int height = 700;

float x=0,y=0,w=50,h=50;
bool bDirection=true;
void Drawing()
{

}
void movie()
{
        glClear(GL_COLOR_BUFFER_BIT);
		glBegin(GL_QUADS);
        glVertex2d(x,y);
        glVertex2d(x,y+h);
        glVertex2d(x+w,y+h);
		glVertex2d(x+w,y);
        glEnd();

		if(x<0||y<0)
			bDirection=true;
		else if(x>700-w||y>700-h)
			bDirection=false;

		if(bDirection)
		{
			x+=0.1;
			y+=0.1;
		}
		else
		{
			x-=0.1;
			y-=0.1;
		}

        glutSwapBuffers();
}
void Init()
{
        glClearColor(1.0,1.0,1.0,0);
        glColor3f(0.0,0.0,0.0);
        glViewport(0,0,width,height);
        glMatrixMode(GL_PROJECTION);
        glLoadIdentity();
        gluOrtho2D(0,700,0,700);
}
int main()
{
        glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);
        glutInitWindowSize(width,height);
        glutInitWindowPosition(0,0);
        glutCreateWindow("Example");
        Init();
        glutDisplayFunc(Drawing);
		glutIdleFunc(movie);
        glutMainLoop();
        return 0;
}
#3

الامر بسيط فقط فكر فيه بالبرمجه العاديه بفرض الشكل mybutton

فى داله الرسم

if(mybutton.left >= WINDOW_WIDTH){
		mybutton.left = 300;
		mybutton.top = 200;
		mybutton.right =400;
		mybutton.bottom = 300;
	}else{
		mybutton.right +=1;
	mybutton.left +=1;
	}

بالتوفيق

no-pain-no-gain.jpg

اذا كنت لا تعلم الى اين تذهب... فكــل الطرق تؤدى الى هناك

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