سؤال

ما هي الخطوات الأساسية لتجميع تطبيق OpenGL باستخدام GLUT (مجموعة أدوات الأداة المساعدة OpenGL) ضمن Visual C++ Express Edition؟

هل كانت مفيدة؟

المحلول

  1. إذا لم يكن لديك Visual C++ Express Edition (VCEE)، فقم بتنزيله وتثبيته VCEE.
  2. يتم إنشاء التثبيت الافتراضي لـ Visual C++ Express Edition للنظام الأساسي .Net.سنحتاج إلى إنشاء منصة Windows نظرًا لأن OpenGL وGLUT غير مدعومين بشكل كامل بعد ضمن .Net.لهذا نحن بحاجة إلى Microsoft Platform SDK.(إذا كنت تستخدم إصدارًا أقدم من VCEE، فقم بتنزيل وتثبيت مايكروسوفت منصة SDK.سيلزم تكوين Visual C++ Express Edition لإنشاء نظام Windows الأساسي.كل هذه التعليمات متوفرة هنا.)
  3. إذا لم يكن لديك GLUT، فقم بتنزيل Nate Robin's وفك ضغطه منفذ ويندوز GLUT.
  4. يضيف تخمة. ح لك منصة SDK/تشمل/GL/ الدليل
  5. ربط المشروع ب تخمة.lib.(انتقل إلى VCEE خصائص المشروع -> أدلة الروابط الإضافية وإضافة الدليل الذي يحتوي على تخمة.lib.
  6. يضيف glut.dll إلى ويندوز/نظام32 الدليل ، بحيث يمكن لجميع البرامج التي تستخدم GLUT العثور عليها في وقت التشغيل.

يجب أن يتم تجميع برنامجك الذي يستخدم GLUT أو OpenGL ضمن Visual C++ Express Edition الآن.

نصائح أخرى

يعود تاريخ منفذ GLUT الموجود على موقع Nate Robin إلى عام 2001 ويحتوي على بعض حالات عدم التوافق مع إصدارات Visual Studio الأحدث من ذلك (.NET 2003 والإصدارات الأحدث).يتجلى عدم التوافق في شكل أخطاء حول إعادة تعريف exit().إذا رأيت هذا الخطأ، فهناك حلان محتملان:

  1. استبدل exit() النموذج الأولي في glut.h مع واحد في الخاص بك stdlib.h حتى يتطابقا.ربما هذا هو الحل الأفضل.
  2. الحل الأسهل هو #define GLUT_DISABLE_ATEXIT_HACK قبلك #include <gl/glut.h> في برنامجك.

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

لقد كنت أستخدم النهج رقم 1 بنفسي منذ ظهور .NET 2003، واستخدمت نفس الطريقة المعدلة glut.h مع VC++ 2003، VC++ 2005 وVC++ 2008.

هذا هو الفرق بين glut.h الذي أستخدمه والذي يفعل رقم 1 (ولكن بشكل مناسب #ifdef blocks بحيث لا يزال يعمل مع الإصدارات الأقدم من Visual Studio):

--- c:\naterobbins\glut.h       2000-12-13 00:22:52.000000000 +0900
+++ c:\updated\glut.h    2006-05-23 11:06:10.000000000 +0900
@@ -143,7 +143,12 @@

 #if defined(_WIN32)
 # ifndef GLUT_BUILDING_LIB
-extern _CRTIMP void __cdecl exit(int);
+/* extern _CRTIMP void __cdecl exit(int);  /* Changed for .NET */
+#  if _MSC_VER >= 1200
+extern _CRTIMP __declspec(noreturn) void __cdecl exit(int);
+#  else
+extern _CRTIMP void __cdecl exit(int);
+#  endif
 # endif
 #else
 /* non-Win32 case. */
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top