السلام عليكم و رحمة الله و بركاته
الإخوة الكرام، والله أنا في اشد الحاجة إليكم
طُلِب منا القيام بمشروع تحريك روبوت باستخدام الاوبن جي آل و مكتبة الغلوت
قمت بتحميل ملف الروبوت الموجود في موقع راد بووك و لكن المشكلة أن عندي خلل فظيع في فهم المصفوقات و ايضا في البوش و البوب
و طيلة يوم أمس و بداية هذا اليوم تمكنت فقط من انشاء هذا البرنامج التافه على ما يبدو
الملون بالأحمر هو ما أضتفه على الكود الأصلي:
طلبي أن تساعدوني في إنشاء مجسم الروبوت و تحريكه، ليس مهما أن تعطوني الكود فقط أريد أن أفهم بعدها كل شيء سهل
عليّ أن أقدم المشروع غدا باذن الله تعالى
جزاكم الله خيرا
#include <GL/glut.h>
#include <stdlib.h>
static int shoulder = -40, elbow = -70; elbow1 = 0; elbow2 = 0; elbow3 = 0;
void init(void)
{
glClearColor (0.0, 0.0, 0.0, 0.0);
glShadeModel (GL_FLAT);
}
void display(void)
{
glClear (GL_COLOR_BUFFER_BIT);
glPushMatrix();
glTranslatef (-1.0, 0.0, 0.0);
glRotatef ((GLfloat) shoulder, 0.0, 0.0, 1.0);
glTranslatef (1.0, 0.0, 0.0);
glPushMatrix();
glScalef (2.0, 0.4, 1.0);
glutWireCube (1.0);
glPopMatrix();
glTranslatef (1.0, 0.0, 0.0);
glRotatef ((GLfloat) elbow, 0.0, 0.0, 1.0);
glTranslatef (1.0, 0.0, 0.0);
glPushMatrix();
glScalef (2.0, 0.4, 1.0);
glutWireCube (1.0);
glPopMatrix();
glPopMatrix();
//corp
glPushMatrix();
glRotatef ((GLfloat) elbow2, 0.0, 0.0, 1.0);
glTranslatef (-2.0, -1.0, 0.0);
glScalef (2.0, 3.5, 1.0);
glutWireCube (1.0);
glPopMatrix();
//pied gauche
glPushMatrix();
glRotatef ((GLfloat) elbow1, 0.0, 0.0, 1.0);
glTranslatef (-1.5, -4.0, 0.0);
glScalef (0.5, 2.5, 1.0);
glutWireCube (1.0);
glPopMatrix();
//pied droit
glPushMatrix();
glRotatef ((GLfloat) elbow3, 0.0, 0.0, 1.0);
glTranslatef (-2.5, -4.0, 0.0);
glScalef (0.5, 2.5, 1.0);
glutWireCube (1.0);
glPopMatrix();
glutSwapBuffers();
}
void reshape (int w, int h)
{
glViewport (0, 0, (GLsizei) w, (GLsizei) h);
glMatrixMode (GL_PROJECTION);
glLoadIdentity ();
gluPerspective(90.0, (GLfloat) w/(GLfloat) h, 1.0, 20.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glTranslatef (1.5, 2.0, -5.0);
}
void keyboard (unsigned char key, int x, int y)
{
switch (key) {
case 's':
shoulder = (shoulder - 5) % 360;
glutPostRedisplay();
break;
case 'S':
shoulder = (shoulder + 5) % 360;
glutPostRedisplay();
break;
case 'e':
elbow = (elbow -5) % 360;
glutPostRedisplay();
break;
case 'E':
elbow = (elbow + 5) % 360;
glutPostRedisplay();
break;
case 'n':
elbow1 = (elbow1 +5) % 360;
elbow2 = (elbow2 +5) % 360;
elbow3 = (elbow3 +5) % 360;
glutPostRedisplay();
break;
case 'N':
elbow1 = (elbow1 -5) % 360;
elbow2 = (elbow2 -5) % 360;
elbow3 = (elbow3 -5) % 360;
glutPostRedisplay();
break;
case 27:
exit(0);
break;
default:
break;
}
}
int main(int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode (GLUT_DOUBLE | GLUT_RGB);
glutInitWindowSize (700, 500);
glutInitWindowPosition (100, 100);
glutCreateWindow (argv[0]);
init ();
glutDisplayFunc(display);
glutReshapeFunc(reshape);
glutKeyboardFunc(keyboard);
glutMainLoop();
return 0;
}