السلام عليكم : هذه دروس مبسطة حول المكتبة GLUT المساندة لOPENGL ماذا تعني ..وبماذا تفيدنا هذه المكتبة ؟ تستخدم لبناء النافذة وربطها بOPENGL تستخدم للادخال ... يعني للتعامل مع رسائل الماوس والكيبورد وعصا الالعاب .. تختصر علينا بعض الامور مثل اضافة النص .. رسم بعض الاشكال الجاهزة .. الخ تعمل على عدد من الانظمة .. هذه الدروس مقتبسة من عدد من الدروس المتناثرة .. اقول مقتبسة وليس مترجمة .. مثلا http://www.lighthous...om/opengl/glut/ ماذا عن دوال Win Api ? مميزة ومفيدة .. لكن قد تكون اصعب ( او اقول ) طويلة نوعا ما .. في دروس NEHE المستخدم هو دوال WIN API .. طبعا WIN API تعطيك كل شيء .. لكن GLUT تسهل حياتك البرمجية .. باكوادها المختصرة . ايهما اتعلم .. GLUT .. او ..WIN API ? النتيجة واحدة ... الغرض من تلك المكتبات بالنسبة لنا .. ربط OPENGL بالنافذة ..والتعامل مع الكيبورد والماوس .. وهذا ماتفعله المكتبتان .. لكن ..انصحط بتعلم GLUT و WIN API لانك ستواجه دروس واكواد بعضها مكتوب بتلك المكتبة وبعضها بالمكتبة الاخرى .. والامر سهل ., اين اجد هذه المكتبة "GLUT" ؟ حمل من هنا http://www.xmission....t-3.7.6-bin.zip انسخ GLUT32.DLL في ملف السيستم اللي عندك وهو في الغالب system32 او system .. انسخ glut32.lib في ملف المكتبات الخاص بالمصرف اللي عندك انسخ ملف الهيدر glut.h والصقه اما في مجلد ملفات الهيدر الرئيسي اللي عندك او في داخل احد المجلدات واللذي يسمى GL الموجود في مجلد الملفات الرأسية اذا اتبعت الحالة الاولى تستدعيه هكذا
#include"glut.h"
#include"GL/glut.h"
#include<glut.h>#include<gl/glu.h>#include<gl/gl.h>void reshape(int w, int h) { glViewport(0, 0, w, h); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(45.0, (float)w/(float)h, 1.0, 300.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity();}void render(void) { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glFlush(); }void main(int argc, char **argv) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_DEPTH | GLUT_SINGLE | GLUT_RGBA); glutInitWindowPosition(100,100); glutInitWindowSize(320,320); glutCreateWindow("arab team - glut "); glutDisplayFunc(render); glutReshapeFunc(reshape); glutMainLoop();}
glutInitDisplayMode(GLUT_DEPTH | GLUT_SINGLE | GLUT_RGBA);
glutInitWindowPosition(100,100);
glutInitWindowSize(320,320);
glutCreateWindow("arab team - glut ");
glutDisplayFunc(render);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glFlush();
glutReshapeFunc(reshape);
void reshape(int w, int h) { glViewport(0, 0, w, h); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(45.0, (float)w/(float)h, 1.0, 300.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity();}
glutMainLoop();
glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA);
glutSwapBuffers();
void glutSolidSphere(GLdouble radius,GLint slices, GLint stacks);
void glutWireSphere(GLdouble radius,GLint slices, GLint stacks);
void glutSolidCube(GLdouble size);
void glutWireCube(GLdouble size);
void glutSolidCone(GLdouble base, GLdouble height,GLint slices, GLint stacks);void glutWireCone(GLdouble base, GLdouble height,GLint slices, GLint stacks);void glutSolidTorus(GLdouble innerRadius,GLdouble outerRadius,GLint nsides, GLint rings);void glutWireTorus(GLdouble innerRadius,GLdouble outerRadius,GLint nsides, GLint rings);void glutSolidDodecahedron(void);void glutWireDodecahedron(void);void glutSolidOctahedron(void);void glutWireOctahedron(void);void glutSolidTetrahedron(void);void glutSolidIcosahedron(void);void glutWireIcosahedron(void);void glutWireTetrahedron(void);void glutSolidTeapot(GLdouble size);void glutWireTeapot(GLdouble size);
void renderScene(void) { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glTranslatef(0,0,-5); glutSolidTeapot(1); glutSwapBuffers();}
glTranslatef(0,0,-5);
void glutSpecialFunc(void (*func)(int key, int x, int y));
glutKeyboardFunc(void (GLUTCALLBACK *func)(unsigned char key, int x, int y));
void key_1(unsigned char key, int x, int y ){ if(key == 27 ) exit(0);}
glutKeyboardFunc(key_1);
void SpecialKeys(int key, int x, int y) { switch(key) { case GLUT_KEY_F1 : size++; break; case GLUT_KEY_F2 : size--;if(size==0)size=0; } glutPostRedisplay();}
glutSolidTeapot(size);
glutSpecialFunc( SpecialKeys);
glutPostRedisplay();
void glutMouseFunction(void (*func)(int button, int state, int x, int y));
void mouse(int button, int state, int x, int y){ if (button == GLUT_RIGHT_BUTTON) { if (state == GLUT_DOWN) cout << "Right button pressed" << endl; else cout << "Right button lifted " << "at (" << x << "," << y << ")" << endl; }}
glutMouseFunc(mouse);
glutPassiveMotionFunc(void (GLUTCALLBACK *func)(int x, int y));
void motionPassive(int x, int y){ cout << "Mouse moved at " << "(" << x << "," << y << ")" << endl;}
glutPassiveMotionFunc(motionPassive);
glutMotionFunc(void (GLUTCALLBACK *func)(int x, int y));
bool lbuttonDown; if (button == GLUT_LEFT_BUTTON) { if (state == GLUT_DOWN) lbuttonDown = true; else lbuttonDown = false; }ثمvoid motion(int x, int y){ if (lbuttonDown) cout << "Mouse dragged with left button at " << "(" << x << "," << y << ")" << endl;}