>> الصفحة الرئيسية >> سلسلة دروس للمبتدئين >> برنامجك الأول في QtOpenGL

الأقسام الرئيسية

 التنصيب والاعداد التنصيب والاعداد
 دروس متقدمة دروس متقدمة
 سلسلة دروس للمبتدئين سلسلة دروس للمبتدئين
 اساسيات لغة سي++ اساسيات لغة سي++
 مقالات ZetCode مقالات ZetCode
 

جديد الدروس

 الوحدة QtUiTools (واجهة المستخدم ديناميكية التوليد)
التاريخ 04/07/2009 الوحدة QtUiTools (واجهة المستخدم ديناميكية التوليد)
 Qt and Phonon
التاريخ 04/07/2009 Qt and Phonon
 تتمة الرسائل ومربعات الحوار في qt
التاريخ 04/07/2009 تتمة الرسائل ومربعات الحوار في qt
 مدخل الى xml في Qt
التاريخ 04/07/2009 مدخل الى xml في Qt
 الإدخال والإخراج لبيانات الفئات
التاريخ 04/07/2009 الإدخال والإخراج لبيانات الفئات
 

برنامجك الأول في QtOpenGL

لماذا openGL مع Qt

ان ماتوفره Qt لك من إمكانيات في التعامل مع openGL يجعلها خيارك الأول في برمجة الجرافيكس ثلاثي الأبعاد حيث ان Qt لاتوفر لك نافذة ترسم عليها بإستخدام openGL فقط بل يعتبر الأخير عنصر رسوم في QGraphicsView يندمج مع العناصر الرسومية الأخرى في مشهد واحد سواء كانت نوافذ او رسومات او كل ماهو مرئي فجميعهم QGraphicsItem.

وبما اننا سوف نتكلم عن أول برنامج فإننا سوف نرسمها على نافذة خاصة لرسم عناصر openGL تدعى GLWidget ضمن الفئة QGLWidget .

وفي حال انك رسم على نافذة مسبقا سوف تعرف ان هناك أحداث خاصة بالرسم على النوافذ (دوال محمية)
تدعى paintEvent() ويتم استدعائها بشكل تلقائي في كل مرة تحرك النافذة او تغير حجمها او حتى تظهر نوافذ أخرى فوقها او بإستخدام الدالة repaint()Qt .

ولكن الآن نحن سوف نرسم على نافذة GL فلذلك فإن الحدث يصبح اسمه paintGL() ويتم استدعاءه لذات الشروط السابقة في الرسم على النوافذ أنر المثال :-

  1.  
  2. #include <QGLWidget>
  3.  
  4. class GLWidget : public QGLWidget
  5. {
  6. Q_OBJECT
  7. public:
  8. GLWidget(QWidget *parent = 0);
  9. protected:
  10. void paintGL(); //paintEvent on all windows
  11. void resizeGL(int width, int height);//event called if you resize the window
  12. };
  13.  


سوف نقوم بإعادة تعرف كل من الدالتين (الحدثين) paintGL() و resizeGL()

  1.  
  2. #include <QtGui>
  3. #include <QtOpenGL>
  4. #include <math.h>
  5.  
  6. #include "glwidget.h"
  7.  
  8. GLWidget::GLWidget(QWidget *parent):QGLWidget(parent){}
  9.  
  10. void GLWidget::paintGL()
  11. {
  12. glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  13. glLoadIdentity();
  14.  
  15. glTranslated(0.0, 0.0, -10.0);
  16. glBegin(GL_POLYGON);
  17. glColor3d(100,0,0);
  18. glVertex2d(1,1);
  19. glVertex2d(1,-1);
  20. glVertex2d(-1,-1);
  21. glVertex2d(-1,1);
  22.  
  23. glEnd();
  24. glFlush();
  25. }
  26.  
  27. void GLWidget::resizeGL(int width, int height)
  28. {
  29. int side = qMin(width, height);
  30.  
  31. glViewport((width - side) , (height - side), side, side);
  32. glClearColor(0,234,0,255);
  33. glMatrixMode(GL_PROJECTION);
  34. glLoadIdentity();
  35. glOrtho(-3.0, +3.0, +3.0, -3.0, 0.0, 30.0);
  36. glMatrixMode(GL_MODELVIEW);
  37. }
  38.  


لاحظ ان جميع الدوال التي في الدالتين paintGL و resizeGL هي دوال تابعة لمكتبة openGL ففي resizeGL قمنا بتهيئة ابعاد النافذة التي سوف نرسم عليها (نام الإحداثيات العام) وسوف يتغير تبعا لتغير حجم النافذة لذلك وضعناه في هذه الدالة بينما في الدالة paintGL قمنا برسم المربع فبذلك نكو قد صنعنا اول برنامج لنا في QtOpenGL.

وأخيرا وفي الدالة main قمنا بإظهار النافذة

  1.  
  2.  
  3. #include "glwidget.h"
  4.  
  5. int main(int argc, char *argv[])
  6. {
  7. QApplication app(argc, argv);
  8. GLWidget glw;
  9. glw.show();
  10.  
  11. return app.exec();
  12. }
  13.  





والسلام عليكم .

إسم الكاتب تاريخ الإضافة التقييم / المقيمين زيارات الدرس
مصفوفة 24/03/2009 15 / 2 1585

الأكثر زيارة

 دليل تنصيب اطار عمل Qt ، حزمة MinGW ، بيئة التطوير QDevelop
الزيارات 4282 دليل تنصيب اطار عمل Qt ، حزمة MinGW ، بيئة التطوير QDevelop
 اعداد وتنصيب Qt
الزيارات 4068 اعداد وتنصيب Qt
 التطوير السريع للتطبيقات Rapid Application Development
الزيارات 3762 التطوير السريع للتطبيقات Rapid Application Development
 دليل تنصيب اطار عمل Qt ، حزمة MinGW ، بيئة التطوير Eclipse
الزيارات 3745 دليل تنصيب اطار عمل Qt ، حزمة MinGW ، بيئة التطوير Eclipse
 C++ In a Nutshell
الزيارات 3151 C++ In a Nutshell
 

الأكثر تصويتـا

 اعداد وتنصيب Qt
نتيجة التصويت 41 من 6 شخص اعداد وتنصيب Qt
 الدرس الاول : كتابة اول برنامج
نتيجة التصويت 41 من 6 شخص الدرس الاول : كتابة اول برنامج
 تخطيط البرامج Program Layout
نتيجة التصويت 40 من 6 شخص تخطيط البرامج Program Layout
 دوال المستوى العالي لبرمجة تطبيقات متعددة المسالك
نتيجة التصويت 30 من 3 شخص دوال المستوى العالي لبرمجة تطبيقات متعددة المسالك
 التطوير السريع للتطبيقات Rapid Application Development
نتيجة التصويت 30 من 5 شخص التطوير السريع للتطبيقات Rapid Application Development
 
 

سكربت story-script v1 برمجة bwady.com تطوير SudaNix