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

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

بدأه مصفوفة في 23 نوفمبر 2008 · 4 رد · 2,763 مشاهدة · في قسم Cross Platform GUI Libraries العام
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

لماذا openGL مع Qt

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

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

وفي حال انك رسم على نافذة مسبقا سوف تعرف ان هناك أحداث خاصة بالرسم على النوافذ (دوال محمية)

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

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

#include <QGLWidget>
class GLWidget : public QGLWidget
{
Q_OBJECT
public:
GLWidget(QWidget *parent = 0);
protected:
void paintGL(); //paintEvent on all windows
void resizeGL(int width, int height);//event called if you resize the window
};

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

include <QtGui>
#include <QtOpenGL>
#include <math.h>
#include "glwidget.h"
GLWidget::GLWidget(QWidget *parent):QGLWidget(parent){}
void GLWidget::paintGL()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
glTranslated(0.0, 0.0, -10.0);
glBegin(GL_POLYGON);
glColor3d(100,0,0);
glVertex2d(1,1);
glVertex2d(1,-1);
glVertex2d(-1,-1);
glVertex2d(-1,1);
glEnd();
glFlush();
}
void GLWidget::resizeGL(int width, int height)
{
int side = qMin(width, height);
glViewport((width - side) , (height - side), side, side);
glClearColor(0,234,0,255);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(-3.0, +3.0, +3.0, -3.0, 0.0, 30.0);
glMatrixMode(GL_MODELVIEW);
}

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

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

#include "glwidget.h"
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
GLWidget glw;
glw.show();
return app.exec();
}

openglpn7.jpg

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

تم تعديل هذه المشاركة بواسطة مصفوفة في 23 نوفمبر 2008 في 13:17

بسم الله الرحمن الرحيم

مدونة دوال

كيوتي العربي

#2

الان أنا في الدوام و فاضي ما عندي شيء قلت خلي انفذ الدرس ،،

اخي محمد هل تعاملت سابقا مع ال GL في ويندوز مع الفيجوال؟

دوال ال GL هي نفسها نفسها ، لا فرق ،،

يعني انا الان استطيع ان اعتمد على أي كتاب لتعلم ال GL

و أرجع الى الامثلة التي طبقتها سابقا في الفيجوال لأنفذها الان في ال Qt .

صحيح كلامي و الا انا غلطان؟؟

وطبعا ..

جزاك الله خيرا على الدرس ،، و بالتأكيد اتمنى منك الاستمرار.

اسف اذا وضعت الرد هنا ،،

أنا كان في نيتك الاستمرار في دروس فياريت نفتح موضوع ثاني خاص بالمناقشة حول الدروس ،،

/index.php/topic/264448-%D8%A7%D9%84%D8%A8%D8%AF%D8%A7%D9%8A%D8%A9-%D9%85%D8%B9-%D8%A7%D9%84%D8%A7%D9%86%D8%AF%D8%B1%D9%88%D9%8A%D8%AF/

 

اني وان كنت الاخير زمانه ---- لأتِ بما لم تستطعه الاوائلُ

#3

لم اتعامل معها من قبل.

نعم اي كتاب لايوجد أي فرق .

لا أبدا خذ راحتك

لكن لاتنسى في ملف pro ضع الشيفرة التالية

QT+=opengl

حتى تتم الترجمة

والسلام ختام .

بسم الله الرحمن الرحيم

مدونة دوال

كيوتي العربي

#4

الأخ العزيز زيد بإمكانك تطبيق دروس nehe انا قمت بتطبيق 5 دروس

فقط ضع كود GL داخ الدالة paintGL لكي يحدث الرسم بشكل تلقائي .

مع تمنياتي لك بالتوفيق .

بسم الله الرحمن الرحيم

مدونة دوال

كيوتي العربي

#5

مشكور أخي محمد ،،

ذكرتني بالاخ علي الدعيج رحمه الله الذي قام بترجمة هذه الدروس ،،

/index.php?showtopic=137154

جزاك الله خير اخي محمد

/index.php/topic/264448-%D8%A7%D9%84%D8%A8%D8%AF%D8%A7%D9%8A%D8%A9-%D9%85%D8%B9-%D8%A7%D9%84%D8%A7%D9%86%D8%AF%D8%B1%D9%88%D9%8A%D8%AF/

 

اني وان كنت الاخير زمانه ---- لأتِ بما لم تستطعه الاوائلُ

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