وشوشونة

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

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

مساء الخير

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

لنفرض قمت برسم مستطيل واريدة كل مرة يعمل ازاحة بمقدار معين ع محور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();

}

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

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

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

شارك هذا الرد


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

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


#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;
}

0

شارك هذا الرد


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

الامر بسيط فقط فكر فيه بالبرمجه العاديه بفرض الشكل 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;
}

بالتوفيق

0

شارك هذا الرد


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

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

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



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

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

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