1. المقدمة:
تدعم دلفي برنامج OpenGl بشكل افتراضي، ويمكنك استخدام وحدة استخدامات OpenGL للإشارة إليه، ومن ثم يمكنك استخدام وظائف OpenGL. يعد OpenGl نظامًا أساسيًا مشتركًا، وقد دعمه Windows منذ فترة طويلة ودمجه في النظام. يوجد Opengl32.dll في System32 ولا يتطلب تثبيتًا إضافيًا. على الرغم من أن Windows نفسه يحتوي على d3d، إلا أن إمكانياته محدودة وهناك عدد قليل نسبيًا من صفحات المواد التعليمية ذات الصلة.
عادةً ما يدعم برنامج OpenGL الأشكال الهندسية الأساسية التالية فقط: النقاط والخطوط والمضلعات . لا يمكن رسم أي أسطح أو رسومات ذات مستوى أعلى (مثل المجالات) كعناصر رسومية أساسية. ولكن يمكن محاكاتها بشكل مثالي باستخدام المضلعات. ألق نظرة غير رسمية على الألعاب ثلاثية الأبعاد الحديثة وسترى أنها مبنية بالكامل تقريبًا من المثلثات. لذلك، نحن لسنا ملزمين بهذا القيد.
2. التهيئة
قبل استخدام OpenGL، تحتاج إلى تعيين بعض المعلمات ذات الصلة. العملية العامة هي:
"تعيين تنسيق البكسل المطابق" (ChoosePixelFormat، SetPixelFormat)
"إنشاء سياق عرض OpenGL جديد" (wglCreateContext)
"تعيين المعلمات ذات الصلة بـ OpenGL"، "الرسم" (glBegin، glEnd)
"حذف سياق عرض OpenGL" (wglDeleteContext)
الإجراء TForm1.FormCreate(Sender: TObject);var pfd:TPIXELFORMATDESCRIPTOR; PFD_DOUBLEBUFFER; // دعم التخزين المؤقت المزدوج iPixelType := PFD_TYPE_RGBA; // نوع اللون cColorBits := 24; // عمق اللون المفضل cRedShift := 0; := 0; cAlphaBits := 0; cAlphaShift := 0; // لا يوجد مخزن مؤقت ألفا cAccumBits := 0; // لا يوجد مخزن مؤقت للتراكم، cAccumGreenBits := 0; = 0; cDepthBits := 16; // عمق المخزن المؤقت cStencilBits := 0; // لا يوجد مخزن مؤقت للاستنسل:= 0; = GetDC(Handle);pixelFormat := ChoosePixelFormat(FDC, @pfd); إذا كان PixelFormat = 0 ثم قم بالخروج؛ وإذا لم يكن SetPixelFormat(FDC, PixelFormat, @pfd) ثم Exit; إلى المعلمة السوداء هي RGBA glClearColor(0, 0, 0, 0); // تعيين الإسقاط الهجائي لمصفوفة تحويل الإسقاط glMatrixMode(GL_PROJECTION); // إعادة تعيين المصفوفة المحددة حاليًا إلى مصفوفة الهوية glLoadIdentity; // حدد OpenGL للرسم في هذه المنطقة glViewPort(0, 0, ClientWidth, ClientHeight); تعيين نطاق نظام الإحداثيات العالمي gluOrtho2D(0, ClientWidth, ClientHeight, 0); قم بتبديل كائن تحويل المصفوفة إلى تحويل عرض النموذج glMatrixMode(GL_MODELVIEW); // إعادة تعيين المصفوفة المحددة حاليًا إلى مصفوفة الهوية glLoadIdentity;end;
3. الرسم
الأساسيات الأساسية لبرنامج OpenGL هي النقاط والخطوط والمضلعات وما إلى ذلك. في كل مرة تقوم فيها بالرسم، تحتاج إلى استخدام glBegin() وglEnd(). على سبيل المثال، إجراء وظيفة الرسم التالي Draw؛
الإجراء TForm1.Draw;begin // مسح المخزن المؤقت glClear(GL_COLOR_BUFFER_BIT أو GL_DEPTH_BUFFER_BIT); // مسح المخزن المؤقت glColor3ub(0, 255, 0); ; // نقل إحداثيات قمة المثلث إلى OpenGL glVertex2f(400, 300); glVertex2f(300, 150); // إنهاء رسم الأوليات. SwapBuffers(FDC); // قم بتبديل محتويات المخزن المؤقت المزدوج، الذي سينسخ الرسومات المرسومة للتو على الشاشة. نهاية؛
4. أخيرًا، تذكر أن تحرر ملفات . الكود بأكمله هو كما يلي:
وحدة Unit1؛ تستخدم واجهات Windows، والرسائل، وSysUtils، والمتغيرات، والفئات، والرسومات، وعناصر التحكم، والنماذج، ومربعات الحوار، وOpenGL؛ المرسل: TObject)؛ الإجراء FormResize(Sender: TObject); FHRC: HGLRC; الإجراء Draw; public { public communication } end;var Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Draw;begin // مسح المخزن المؤقت glClear(GL_COLOR_BUFFER_BIT أو GL_DEPTH_BUFFER_BIT); glColor3ub(0, 255, 0); glBegin(GL_TRIANGLES);// أخبر OpenGL أنه سيتم رسم المثلث glVertex2f(200, 300); // انقل إحداثيات القمة الثلاثة للمثلث إلى OpenGL glVertex2f(400, 300); glEnd; // إنهاء رسم يوان الصورة. SwapBuffers(FDC); // قم بتبديل محتويات المخزن المؤقت المزدوج، الذي سينسخ الرسومات المرسومة للتو على الشاشة. end;procedure TForm1.FormCreate(Sender: TObject);var pfd:TPIXELFORMATDESCRIPTOR; PFD_DRAW_TO_WINDOW أو PFD_DOUBLEBUFFER؛ // دعم التخزين المؤقت المزدوج iPixelType := PFD_TYPE_RGBA؛ // نوع اللون cColorBits := 24؛ // عمق اللون المفضل cRedBits := 0؛ ; cBlueShift := 0; cAlphaBits := 0; cAlphaShift := 0; // لا يوجد مخزن مؤقت ألفا cAccumRedBits := 0; = 0; cAccumAlphaBits := 0; cDepthBits := 16; cStencilBits := 0; // لا يوجد مخزن مؤقت للاستنسل cAuxBuffers := 0; ; FDC := GetDC(Handle); := ChoosePixelFormat(FDC, @pfd); إذا كان PixelFormat = 0 ثم Exit; اللون أسود والمعلمة هي RGBA glClearColor(0, 0, 0, 0); // تعيين الإسقاط الهجائي لمصفوفة تحويل الإسقاط glMatrixMode(GL_PROJECTION); // إعادة تعيين المصفوفة المحددة حاليًا إلى مصفوفة الهوية glLoadIdentity; // حدد OpenGL للرسم في هذه المنطقة glViewPort(0, 0, ClientWidth, ClientHeight) // تعيين نطاق نظام الإحداثيات العالمي gluOrtho2D(0, ClientWidth, ClientHeight, 0); تبديل كائن تحويل المصفوفة إلى تحويل عرض النموذج glMatrixMode(GL_MODELVIEW); // إعادة تعيين المصفوفة المحددة حاليًا إلى مصفوفة الهوية glLoadIdentity;end;procedure TForm1.FormDestroy(Sender: TObject);begin wglMakeCurrent(FDC, FHRC); FHRC)؛ ReleaseDC(Handle, FDC);end;procedure TForm1.FormPaint(Sender: TObject);begin Draw;end;procedure TForm1.FormResize(Sender: TObject);begin // أعد تحديد منطقة الرسم عندما يتغير حجم النافذة glClearColor(0, 0, 0, 0); ) ; glLoadIdentity; glViewPort(0, 0, ClientWidth, ClientHeight); gluOrtho2D(0, ClientWidth, ClientHeight, 0); glMatrixMode(GL_MODELVIEW); glLoadIdentity;end;end.
انقر هنا لتحميل الكود الكامل