
مقدمة
OpenSceneGraph (المشار إليه فيما بعد باسم OSG) هو إطار عمل مفتوح عبر النظام الأساسي مكتوب بلغة C ++ ويمثل محرك رسومي يوفر للمبرمج واجهة كائن لـ OpenGL. في بلدنا ، هذا المحرك ليس شائعًا بشكل خاص ، حتى في حبري رأيت
منشورًا واحدًا
أو أكثر لائقًا حوله . يتم استخدام OSG في الخارج كثيرًا ، حيث ، على سبيل المثال ، هو الأساس لمحاكاة
FlightGear المجانية للطيران ، وهناك تطبيق مفتوح للعبة Morrowind ، التي تسمى
OpenMW ، والتي يتم نقل تطويرها أيضًا إلى OSG من محرك
Ogre . وثائق اللغة الروسية عليها صغيرة بشكل غير واضح ، ومن بين وثائق اللغة الإنجليزية ، يمكن ملاحظة سلسلة من الكتب فقط من المطورين:
OpenSceneGraph 3.0. دليل المبتدئين و
OpenSceneGraph 3. كتاب الطبخ .
ومع ذلك ، فإن المحرك مثير للاهتمام للأسباب التالية:
- تطبيق مفتوح عبر الأنظمة الأساسية في C ++.
- العمارة المعيارية.
- القابلية للتوسعة من خلال نظام البرنامج المساعد المدمج.
- إمكانية المعالجة المتعددة الخيوط للبيانات الرسومية والأدوات المدمجة لتنفيذها
- إدارة الذاكرة الديناميكية من خلال آلية المؤشر الذكية
أعتقد أنه سيكون من المثير للاهتمام لقراء هبر التعرف على هذا المشروع بمزيد من التفصيل. إن تجديد قاعدة معارف OSG باللغة الروسية لن يكون غير ضروري. تستند جميع المواد التي سأقوم بنشرها في هذا الموضوع إلى كتاب
OpenSceneGraph 3.0. دليل المبتدئين ، لكنها ليست ترجمته ، بل مراجعة إبداعية للمادة المعروضة هناك. إذا كنت مهتمًا بهذا الموضوع ، فأنا أطلب قطعًا
الطريقة الوحيدة المؤكدة للحصول على أحدث إصدار من OSG على جهازك هي بناء المكتبة من المصدر. يركز المثبت الثنائي الحالي لـ Windows على برنامج التحويل البرمجي MS Visual C ++. بالنسبة لي ، من أجل مشاريعي ، من الضروري استخدام مترجم GCC ، أو بالأحرى نسخته من MinGW32 ، والتي يتم تضمينها في توريد أدوات تطوير إطار Qt. لذلك نحن بحاجة إلى:
- إطار عمل Qt تم تثبيته وتكوينه باستخدام برنامج مترجم MinGW32 الإصدار 5.3 و QtCreator IDE
- عميل Git لنظام التشغيل Windows
- أداة Cmake لنظام التشغيل Windows
من المتوقع أن يكون القارئ على دراية بـ QtCreator IDE ونظام بناء qmake المستخدم في مشاريع Qt. بالإضافة إلى ذلك ، من المفترض أن القارئ يعرف أساسيات استخدام نظام التحكم في إصدار Git ولديه مهارات برمجة غير صفرية من حيث المبدأ.
1. الحصول على مصادر OpenSceneGraph
نقوم بإنشاء دليل على محرك الأقراص الثابتة الخاص بنا حيث سنقوم بإنشاء OSG ، على سبيل المثال ، على طول المسار D: \ OSG

سنذهب إلى هذا الدليل ونحصل على المصدر من
مستودع OSG الرسمي على GithubD:\OSG> git clone https:
يعتمد طول عملية التنزيل على مدى اتساع قناة الوصول إلى الإنترنت. عاجلاً أم آجلاً ، سوف نتلقى نسخة محلية من مستودع OSG.
بعد تنزيل المصادر ، أنشئ دليل build-win32-debug القريب

في هذا الكتالوج سنقوم ببناء مجموعة التصحيح OSG. لكن قبل ذلك
2. تكوين cmake
لكي تعمل cmake بشكل صحيح ، نحتاج إلى تحرير
ملف مسار التثبيت cmake \ share \ cmake-3.13 \ Modules \ CMakeMinGWFindMake.cmake . بشكل افتراضي ، يبدو هذا
نعلق بعض الأسطر فيه ، حتى لا تحاول الأداة البحث عن قذيفة Unix في نظامنا ، وإذا لم تجدها ، فإنها تنتهي بخطأ
3. تجميع وتركيب إصدارات التصحيح والإصدار للمحرك
الآن قم بتشغيل shell cmd ، والاختصار الذي يقع عليه Start-> Programs-> Qt-> Qt 5.11.2-> Qt 5.11.2 لسطح المكتب (MinGW 5.3.0 32bit)

تعمل جلسة سطر الأوامر قيد التشغيل على إعداد البيئة الكاملة اللازمة لأدوات بناء mingw32 للعمل. انتقل إلى دليل مصدر OSG
C:\Qt\Qt5.11.2\5.11.2\mingw53_32>D: D:\> cd OSG\build-win32-debug
أمر
D:\OSG\build-win32-debug>cmake -G "MinGW Makefiles" -DCMAKE_INSTALL_PREFIX=E:\Apps\OSG -DCMAKE_BUILD_TYPE=DEBUG ../OpenSceneGraph
دعونا نحلل معنى المعلمات بمزيد من التفصيل:
- -G "MinGW Makefiles" - يشير إلى أنه من الضروري إنشاء ملف Makefile لأداة mingw32 Make
- -DCMAKE_INSTALL_PREFIX = E: \ Apps \ OSG - قم بتعيين المسار حيث سيتم تثبيت OSG
- -DCMAKE_BUILD_TYPE = DEBUG - يشير إلى أنه يجب بناء نسخة تصحيح من المحرك.
يتحقق تنفيذ الأمر من جاهزية البيئة للتجميع ، ويقوم بإنشاء برنامج نصي للعادم والعادم التالي
Cmake العادم عند تكوين بناء OSG -- The C compiler identification is GNU 5.3.0 -- The CXX compiler identification is GNU 5.3.0 -- Check for working C compiler: C:/Qt/Qt5.11.2/Tools/mingw530_32/bin/gcc.exe -- Check for working C compiler: C:/Qt/Qt5.11.2/Tools/mingw530_32/bin/gcc.exe -- works -- Detecting C compiler ABI info -- Detecting C compiler ABI info - done -- Detecting C compile features -- Detecting C compile features - done -- Check for working CXX compiler: C:/Qt/Qt5.11.2/Tools/mingw530_32/bin/g++.exe -- Check for working CXX compiler: C:/Qt/Qt5.11.2/Tools/mingw530_32/bin/g++.exe -- works -- Detecting CXX compiler ABI info -- Detecting CXX compiler ABI info - done -- Detecting CXX compile features -- Detecting CXX compile features - done -- Looking for pthread.h -- Looking for pthread.h - found -- Looking for pthread_create -- Looking for pthread_create - found -- Found Threads: TRUE -- Found OpenGL: opengl32 -- Could NOT find EGL (missing: EGL_INCLUDE_DIR) -- Checking windows version... -- Performing Test GL_HEADER_HAS_GLINT64 -- Performing Test GL_HEADER_HAS_GLINT64 - Failed -- Performing Test GL_HEADER_HAS_GLUINT64 -- Performing Test GL_HEADER_HAS_GLUINT64 - Failed -- 32 bit architecture detected -- Could NOT find Freetype (missing: FREETYPE_LIBRARY FREETYPE_INCLUDE_DIRS) -- Could NOT find JPEG (missing: JPEG_LIBRARY JPEG_INCLUDE_DIR) -- Could NOT find Jasper (missing: JASPER_LIBRARIES JASPER_INCLUDE_DIR JPEG_LIBRARIES) -- Could NOT find LibXml2 (missing: LIBXML2_LIBRARY LIBXML2_INCLUDE_DIR) -- Could NOT find ZLIB (missing: ZLIB_INCLUDE_DIR) -- Could NOT find ZLIB (missing: ZLIB_INCLUDE_DIR) -- Could NOT find GDAL (missing: GDAL_LIBRARY GDAL_INCLUDE_DIR) -- Could NOT find PkgConfig (missing: PKG_CONFIG_EXECUTABLE) -- Could NOT find CURL (missing: CURL_LIBRARY CURL_INCLUDE_DIR) -- Trying to find DCMTK expecting DCMTKConfig.cmake -- Trying to find DCMTK expecting DCMTKConfig.cmake - failed -- Trying to find DCMTK relying on FindDCMTK.cmake -- Please set DCMTK_DIR and re-run configure (missing: DCMTK_config_INCLUDE_DIR DCMTK_dcmdata_INCLUDE_DIR DCMTK_dcmimage_INCLUDE_DIR DCMTK_dcmimgle_INCLUDE_DIR DCMTK_dcmjpeg_INCLUDE_DIR DCMTK_dcmjpls_INCLUDE_DIR DCMTK_dcmnet_INCLUDE_DIR DCMTK_dcmpstat_INCLUDE_DIR DCMTK_dcmqrdb_INCLUDE_DIR DCMTK_dcmsign_INCLUDE_DIR DCMTK_dcmsr_INCLUDE_DIR DCMTK_dcmtls_INCLUDE_DIR DCMTK_ofstd_INCLUDE_DIR DCMTK_oflog_INCLUDE_DIR) -- Could NOT find PkgConfig (missing: PKG_CONFIG_EXECUTABLE) -- Could NOT find GStreamer (missing: GSTREAMER_INCLUDE_DIRS GSTREAMER_LIBRARIES GSTREAMER_VERSION GSTREAMER_BASE_INCLUDE_DIRS GSTREAMER_BASE_LIBRARIES GSTREAMER_APP_INCLUDE_DIRS GSTREAMER_APP_LIBRARIES GSTREAMER_PBUTILS_INCLUDE_DIRS GSTREAMER_PBUTILS_LIBRARIES) (found version "") -- Could NOT find SDL2 (missing: SDL2_LIBRARY SDL2_INCLUDE_DIR) -- Could NOT find SDL (missing: SDL_LIBRARY SDL_INCLUDE_DIR) -- Could NOT find PkgConfig (missing: PKG_CONFIG_EXECUTABLE) -- Could NOT find PkgConfig (missing: PKG_CONFIG_EXECUTABLE) -- Could NOT find PkgConfig (missing: PKG_CONFIG_EXECUTABLE) -- Could NOT find JPEG (missing: JPEG_LIBRARY JPEG_INCLUDE_DIR) -- Could NOT find ZLIB (missing: ZLIB_INCLUDE_DIR) -- Could NOT find PNG (missing: PNG_LIBRARY PNG_PNG_INCLUDE_DIR) -- Could NOT find TIFF (missing: TIFF_LIBRARY TIFF_INCLUDE_DIR) -- g++ version 5.3.0 -- Performing Test _OPENTHREADS_ATOMIC_USE_GCC_BUILTINS -- Performing Test _OPENTHREADS_ATOMIC_USE_GCC_BUILTINS - Success -- Performing Test _OPENTHREADS_ATOMIC_USE_MIPOSPRO_BUILTINS -- Performing Test _OPENTHREADS_ATOMIC_USE_MIPOSPRO_BUILTINS - Failed -- Performing Test _OPENTHREADS_ATOMIC_USE_SUN -- Performing Test _OPENTHREADS_ATOMIC_USE_SUN - Failed -- Performing Test _OPENTHREADS_ATOMIC_USE_WIN32_INTERLOCKED -- Performing Test _OPENTHREADS_ATOMIC_USE_WIN32_INTERLOCKED - Success -- Performing Test _OPENTHREADS_ATOMIC_USE_BSD_ATOMIC -- Performing Test _OPENTHREADS_ATOMIC_USE_BSD_ATOMIC - Failed -- Configuring done -- Generating done -- Build files have been written to: D:/OSG/build-win32-debug
تكوين (مفقود: DCMTK_config_INCLUDE_DIR DCMTK_dcmdata_INCLUDE_DIR DCMTK_dcmimage_INCLUDE_DIR DCMTK_dcmimgle_INCLUDE_DIR DCMTK_dcmjpeg_INCLUDE_DIR DCMTK_dcmjpls_INCLUDE_DIR DCMTK_dcmnet_INCLUDE_DIR DCMTK_dcmpstat_INCLUDE_DIR DCMTK_dcmqrdb_INCLUDE_DIR DCMTK_dcmsign_INCLUDE_DIR DCMTK_dcmsr_INCLUDE_DIR DCMTK_dcmtls_INCLUDE_DIR DCMTK_ofstd_INCLUDE_DIR DCMTK_oflog_INCLUDE_DIR) -- The C compiler identification is GNU 5.3.0 -- The CXX compiler identification is GNU 5.3.0 -- Check for working C compiler: C:/Qt/Qt5.11.2/Tools/mingw530_32/bin/gcc.exe -- Check for working C compiler: C:/Qt/Qt5.11.2/Tools/mingw530_32/bin/gcc.exe -- works -- Detecting C compiler ABI info -- Detecting C compiler ABI info - done -- Detecting C compile features -- Detecting C compile features - done -- Check for working CXX compiler: C:/Qt/Qt5.11.2/Tools/mingw530_32/bin/g++.exe -- Check for working CXX compiler: C:/Qt/Qt5.11.2/Tools/mingw530_32/bin/g++.exe -- works -- Detecting CXX compiler ABI info -- Detecting CXX compiler ABI info - done -- Detecting CXX compile features -- Detecting CXX compile features - done -- Looking for pthread.h -- Looking for pthread.h - found -- Looking for pthread_create -- Looking for pthread_create - found -- Found Threads: TRUE -- Found OpenGL: opengl32 -- Could NOT find EGL (missing: EGL_INCLUDE_DIR) -- Checking windows version... -- Performing Test GL_HEADER_HAS_GLINT64 -- Performing Test GL_HEADER_HAS_GLINT64 - Failed -- Performing Test GL_HEADER_HAS_GLUINT64 -- Performing Test GL_HEADER_HAS_GLUINT64 - Failed -- 32 bit architecture detected -- Could NOT find Freetype (missing: FREETYPE_LIBRARY FREETYPE_INCLUDE_DIRS) -- Could NOT find JPEG (missing: JPEG_LIBRARY JPEG_INCLUDE_DIR) -- Could NOT find Jasper (missing: JASPER_LIBRARIES JASPER_INCLUDE_DIR JPEG_LIBRARIES) -- Could NOT find LibXml2 (missing: LIBXML2_LIBRARY LIBXML2_INCLUDE_DIR) -- Could NOT find ZLIB (missing: ZLIB_INCLUDE_DIR) -- Could NOT find ZLIB (missing: ZLIB_INCLUDE_DIR) -- Could NOT find GDAL (missing: GDAL_LIBRARY GDAL_INCLUDE_DIR) -- Could NOT find PkgConfig (missing: PKG_CONFIG_EXECUTABLE) -- Could NOT find CURL (missing: CURL_LIBRARY CURL_INCLUDE_DIR) -- Trying to find DCMTK expecting DCMTKConfig.cmake -- Trying to find DCMTK expecting DCMTKConfig.cmake - failed -- Trying to find DCMTK relying on FindDCMTK.cmake -- Please set DCMTK_DIR and re-run configure (missing: DCMTK_config_INCLUDE_DIR DCMTK_dcmdata_INCLUDE_DIR DCMTK_dcmimage_INCLUDE_DIR DCMTK_dcmimgle_INCLUDE_DIR DCMTK_dcmjpeg_INCLUDE_DIR DCMTK_dcmjpls_INCLUDE_DIR DCMTK_dcmnet_INCLUDE_DIR DCMTK_dcmpstat_INCLUDE_DIR DCMTK_dcmqrdb_INCLUDE_DIR DCMTK_dcmsign_INCLUDE_DIR DCMTK_dcmsr_INCLUDE_DIR DCMTK_dcmtls_INCLUDE_DIR DCMTK_ofstd_INCLUDE_DIR DCMTK_oflog_INCLUDE_DIR) -- Could NOT find PkgConfig (missing: PKG_CONFIG_EXECUTABLE) -- Could NOT find GStreamer (missing: GSTREAMER_INCLUDE_DIRS GSTREAMER_LIBRARIES GSTREAMER_VERSION GSTREAMER_BASE_INCLUDE_DIRS GSTREAMER_BASE_LIBRARIES GSTREAMER_APP_INCLUDE_DIRS GSTREAMER_APP_LIBRARIES GSTREAMER_PBUTILS_INCLUDE_DIRS GSTREAMER_PBUTILS_LIBRARIES) (found version "") -- Could NOT find SDL2 (missing: SDL2_LIBRARY SDL2_INCLUDE_DIR) -- Could NOT find SDL (missing: SDL_LIBRARY SDL_INCLUDE_DIR) -- Could NOT find PkgConfig (missing: PKG_CONFIG_EXECUTABLE) -- Could NOT find PkgConfig (missing: PKG_CONFIG_EXECUTABLE) -- Could NOT find PkgConfig (missing: PKG_CONFIG_EXECUTABLE) -- Could NOT find JPEG (missing: JPEG_LIBRARY JPEG_INCLUDE_DIR) -- Could NOT find ZLIB (missing: ZLIB_INCLUDE_DIR) -- Could NOT find PNG (missing: PNG_LIBRARY PNG_PNG_INCLUDE_DIR) -- Could NOT find TIFF (missing: TIFF_LIBRARY TIFF_INCLUDE_DIR) -- g++ version 5.3.0 -- Performing Test _OPENTHREADS_ATOMIC_USE_GCC_BUILTINS -- Performing Test _OPENTHREADS_ATOMIC_USE_GCC_BUILTINS - Success -- Performing Test _OPENTHREADS_ATOMIC_USE_MIPOSPRO_BUILTINS -- Performing Test _OPENTHREADS_ATOMIC_USE_MIPOSPRO_BUILTINS - Failed -- Performing Test _OPENTHREADS_ATOMIC_USE_SUN -- Performing Test _OPENTHREADS_ATOMIC_USE_SUN - Failed -- Performing Test _OPENTHREADS_ATOMIC_USE_WIN32_INTERLOCKED -- Performing Test _OPENTHREADS_ATOMIC_USE_WIN32_INTERLOCKED - Success -- Performing Test _OPENTHREADS_ATOMIC_USE_BSD_ATOMIC -- Performing Test _OPENTHREADS_ATOMIC_USE_BSD_ATOMIC - Failed -- Configuring done -- Generating done -- Build files have been written to: D:/OSG/build-win32-debug
GSTREAMER_INCLUDE_DIRS GSTREAMER_LIBRARIES GSTREAMER_VERSION GSTREAMER_BASE_INCLUDE_DIRS GSTREAMER_BASE_LIBRARIES GSTREAMER_APP_INCLUDE_DIRS GSTREAMER_APP_LIBRARIES GSTREAMER_PBUTILS_INCLUDE_DIRS GSTREAMER_PBUTILS_LIBRARIES) (الإصدار جدت "") -- The C compiler identification is GNU 5.3.0 -- The CXX compiler identification is GNU 5.3.0 -- Check for working C compiler: C:/Qt/Qt5.11.2/Tools/mingw530_32/bin/gcc.exe -- Check for working C compiler: C:/Qt/Qt5.11.2/Tools/mingw530_32/bin/gcc.exe -- works -- Detecting C compiler ABI info -- Detecting C compiler ABI info - done -- Detecting C compile features -- Detecting C compile features - done -- Check for working CXX compiler: C:/Qt/Qt5.11.2/Tools/mingw530_32/bin/g++.exe -- Check for working CXX compiler: C:/Qt/Qt5.11.2/Tools/mingw530_32/bin/g++.exe -- works -- Detecting CXX compiler ABI info -- Detecting CXX compiler ABI info - done -- Detecting CXX compile features -- Detecting CXX compile features - done -- Looking for pthread.h -- Looking for pthread.h - found -- Looking for pthread_create -- Looking for pthread_create - found -- Found Threads: TRUE -- Found OpenGL: opengl32 -- Could NOT find EGL (missing: EGL_INCLUDE_DIR) -- Checking windows version... -- Performing Test GL_HEADER_HAS_GLINT64 -- Performing Test GL_HEADER_HAS_GLINT64 - Failed -- Performing Test GL_HEADER_HAS_GLUINT64 -- Performing Test GL_HEADER_HAS_GLUINT64 - Failed -- 32 bit architecture detected -- Could NOT find Freetype (missing: FREETYPE_LIBRARY FREETYPE_INCLUDE_DIRS) -- Could NOT find JPEG (missing: JPEG_LIBRARY JPEG_INCLUDE_DIR) -- Could NOT find Jasper (missing: JASPER_LIBRARIES JASPER_INCLUDE_DIR JPEG_LIBRARIES) -- Could NOT find LibXml2 (missing: LIBXML2_LIBRARY LIBXML2_INCLUDE_DIR) -- Could NOT find ZLIB (missing: ZLIB_INCLUDE_DIR) -- Could NOT find ZLIB (missing: ZLIB_INCLUDE_DIR) -- Could NOT find GDAL (missing: GDAL_LIBRARY GDAL_INCLUDE_DIR) -- Could NOT find PkgConfig (missing: PKG_CONFIG_EXECUTABLE) -- Could NOT find CURL (missing: CURL_LIBRARY CURL_INCLUDE_DIR) -- Trying to find DCMTK expecting DCMTKConfig.cmake -- Trying to find DCMTK expecting DCMTKConfig.cmake - failed -- Trying to find DCMTK relying on FindDCMTK.cmake -- Please set DCMTK_DIR and re-run configure (missing: DCMTK_config_INCLUDE_DIR DCMTK_dcmdata_INCLUDE_DIR DCMTK_dcmimage_INCLUDE_DIR DCMTK_dcmimgle_INCLUDE_DIR DCMTK_dcmjpeg_INCLUDE_DIR DCMTK_dcmjpls_INCLUDE_DIR DCMTK_dcmnet_INCLUDE_DIR DCMTK_dcmpstat_INCLUDE_DIR DCMTK_dcmqrdb_INCLUDE_DIR DCMTK_dcmsign_INCLUDE_DIR DCMTK_dcmsr_INCLUDE_DIR DCMTK_dcmtls_INCLUDE_DIR DCMTK_ofstd_INCLUDE_DIR DCMTK_oflog_INCLUDE_DIR) -- Could NOT find PkgConfig (missing: PKG_CONFIG_EXECUTABLE) -- Could NOT find GStreamer (missing: GSTREAMER_INCLUDE_DIRS GSTREAMER_LIBRARIES GSTREAMER_VERSION GSTREAMER_BASE_INCLUDE_DIRS GSTREAMER_BASE_LIBRARIES GSTREAMER_APP_INCLUDE_DIRS GSTREAMER_APP_LIBRARIES GSTREAMER_PBUTILS_INCLUDE_DIRS GSTREAMER_PBUTILS_LIBRARIES) (found version "") -- Could NOT find SDL2 (missing: SDL2_LIBRARY SDL2_INCLUDE_DIR) -- Could NOT find SDL (missing: SDL_LIBRARY SDL_INCLUDE_DIR) -- Could NOT find PkgConfig (missing: PKG_CONFIG_EXECUTABLE) -- Could NOT find PkgConfig (missing: PKG_CONFIG_EXECUTABLE) -- Could NOT find PkgConfig (missing: PKG_CONFIG_EXECUTABLE) -- Could NOT find JPEG (missing: JPEG_LIBRARY JPEG_INCLUDE_DIR) -- Could NOT find ZLIB (missing: ZLIB_INCLUDE_DIR) -- Could NOT find PNG (missing: PNG_LIBRARY PNG_PNG_INCLUDE_DIR) -- Could NOT find TIFF (missing: TIFF_LIBRARY TIFF_INCLUDE_DIR) -- g++ version 5.3.0 -- Performing Test _OPENTHREADS_ATOMIC_USE_GCC_BUILTINS -- Performing Test _OPENTHREADS_ATOMIC_USE_GCC_BUILTINS - Success -- Performing Test _OPENTHREADS_ATOMIC_USE_MIPOSPRO_BUILTINS -- Performing Test _OPENTHREADS_ATOMIC_USE_MIPOSPRO_BUILTINS - Failed -- Performing Test _OPENTHREADS_ATOMIC_USE_SUN -- Performing Test _OPENTHREADS_ATOMIC_USE_SUN - Failed -- Performing Test _OPENTHREADS_ATOMIC_USE_WIN32_INTERLOCKED -- Performing Test _OPENTHREADS_ATOMIC_USE_WIN32_INTERLOCKED - Success -- Performing Test _OPENTHREADS_ATOMIC_USE_BSD_ATOMIC -- Performing Test _OPENTHREADS_ATOMIC_USE_BSD_ATOMIC - Failed -- Configuring done -- Generating done -- Build files have been written to: D:/OSG/build-win32-debug
يخبرنا أنه يمكنك البدء في التجميع. أمر
D:\OSG\build-win32-debug>mingw32-make -j9
يمكنك ، كما في المثال الخاص بي ، تحديد عدد خيوط التجميع إذا كان لديك معالج متعدد النواة (-j switch). ستبدأ عملية البناء ، وتستغرق حوالي ثماني دقائق على جهاز الكمبيوتر الخاص بي

في نهاية التجميع ، قم بتثبيت المكتبة
D:\OSG\build-win32-debug> mingw32-make install
بعد تنفيذ الأمر ، نجد المكتبة مثبتة على المسار الذي حددناه مسبقًا

الآن دعنا نبني نسخة إصدار المحرك من خلال إنشاء دليل بناء آخر
D:\OSG\build-win32-debug>cd .. D:\OSG> mkdir build-win32-release D:\OSG>cd build-win32-release D:\OSG\build-win32-release> cmake -G "MinGW Makefiles" -DCMAKE_INSTALL_PREFIX=E:\Apps\OSG ../OpenSceneGraph D:\OSG\build-win32-release> mingw32-make -j9 D:\OSG\build-win32-release> mingw32-make install
4. تحديد متغيرات البيئة
يمكن أن يكون موقع مكتبات OSG بعد التثبيت - يتم تحديده حسب رغبات مستخدم معين وقدرته على وضع الملفات على جهاز الكمبيوتر. في نفس الوقت ، عند إعداد مشروع معين يستخدم البيانات ، تتطلب المكتبة توحيدًا معينًا ، مستخلصًا من الموقع المحدد للمكتبات.
لنقم بإنشاء بعض متغيرات بيئة النظام التي تشير إلى المسارات إلى المكتبات وملفات العناوين والمكونات الإضافية OSG. في المثال الخاص بي ، سيبدو هذا

من الضروري إنشاء متغيرات تحمل أسماءها باللون الأحمر في لقطة الشاشة. بعد إنشاء المتغيرات ، لكي تكون مرئية من خلال أدوات التطوير ، على وجه الخصوص ، يحتاج QtCreator إلى تسجيل الدخول إلى النظام على الأقل (تسجيل الخروج وتسجيل الدخول باسم المستخدم الحالي) أو ربما إعادة تشغيل النظام (هذا هو Windows!)
بعد ذلك ، يمكن اعتبار إجراء تثبيت OSG على جهاز الكمبيوتر الخاص بنا مكتملاً.
5. كتابة Hello World إلى QtCreator
سنبدأ التعرف على محرك الرسوميات OpenSceneGraph بمثال بسيط ، كما هو معتاد في البرمجة مع "Hello world!" معينة
قبل كتابة أي كود ، سنقوم بتهيئة مشروعنا لنظام بناء qmake ، والذي سنستخدمه طوال سلسلة المقالات بأكملها. في مكان نظام الملفات الذي يهمنا ، قم بإنشاء بنية الدليل التالية
OSG-lessons/ |-data/ |-OSG-lessons/ | |-hello/ |-include/ |-src/
في دليل hello ، قم بإنشاء ملف
hello.pro بالمحتويات التالية
النص الكامل hello.pro TEMPLATE = app TARGET = hello DESTDIR = ../../bin win32 { OSG_LIB_DIRECTORY = $$(OSG_BIN_PATH) OSG_INCLUDE_DIRECTORY = $$(OSG_INCLUDE_PATH) CONFIG(debug, debug|release) { TARGET = $$join(TARGET,,,_d) LIBS += -L$$OSG_LIB_DIRECTORY -losgd LIBS += -L$$OSG_LIB_DIRECTORY -losgViewerd LIBS += -L$$OSG_LIB_DIRECTORY -losgDBd LIBS += -L$$OSG_LIB_DIRECTORY -lOpenThreadsd } else { LIBS += -L$$OSG_LIB_DIRECTORY -losg LIBS += -L$$OSG_LIB_DIRECTORY -losgViewer LIBS += -L$$OSG_LIB_DIRECTORY -losgDB LIBS += -L$$OSG_LIB_DIRECTORY -lOpenThreads } INCLUDEPATH += $$OSG_INCLUDE_DIRECTORY } unix { CONFIG(debug, debug|release) { TARGET = $$join(TARGET,,,_d) LIBS += -losgd LIBS += -losgViewerd LIBS += -losgDBd LIBS += -lOpenThreadsd } else { LIBS += -losg LIBS += -losgViewer LIBS += -losgDB LIBS += -lOpenThreads } } INCLUDEPATH += ./include HEADERS += $$files(./include/*.h) SOURCES += $$files(./src/*.cpp)
سنحلل هذه الرسائل بمزيد من التفصيل.
TEMPLATE = app TARGET = hello DESTDIR = ../../bin
تحدد المتغيرات قالب المشروع (التطبيق - التطبيق) واسم الملف القابل للتنفيذ (مرحبًا) والدليل حيث يتم وضع الملف القابل للتنفيذ بعد التجميع.
win32 { OSG_LIB_DIRECTORY = $$(OSG_BIN_PATH) OSG_INCLUDE_DIRECTORY = $$(OSG_INCLUDE_PATH) CONFIG(debug, debug|release) { TARGET = $$join(TARGET,,,_d) LIBS += -L$$OSG_LIB_DIRECTORY -losgd LIBS += -L$$OSG_LIB_DIRECTORY -losgViewerd LIBS += -L$$OSG_LIB_DIRECTORY -losgDBd LIBS += -L$$OSG_LIB_DIRECTORY -lOpenThreadsd } else { LIBS += -L$$OSG_LIB_DIRECTORY -losg LIBS += -L$$OSG_LIB_DIRECTORY -losgViewer LIBS += -L$$OSG_LIB_DIRECTORY -losgDB LIBS += -L$$OSG_LIB_DIRECTORY -lOpenThreads } INCLUDEPATH += $$OSG_INCLUDE_DIRECTORY }
بناءً على نظام التشغيل حيث يتم تجميع المشروع ، نحدد المتغيرات التي تشير إلى المسارات إلى أدلة المكتبة وملفات رؤوس OSG. هذا هو المكان الذي أصبحت فيه متغيرات البيئة OSG_BIN_PATH و OSG_INCLUDE_PATH مفيدة - الآن لا يهم مكان تثبيت مكتبة OSG. أي شخص يرغب في العمل مع هذا المشروع على جهاز الكمبيوتر الخاص به سوف يكتب ببساطة متغيرات البيئة المناسبة في نظامه دون تحرير البرنامج النصي للبناء.
CONFIG(debug, debug|release) { TARGET = $$join(TARGET,,,_d) LIBS += -L$$OSG_LIB_DIRECTORY -losgd LIBS += -L$$OSG_LIB_DIRECTORY -losgViewerd LIBS += -L$$OSG_LIB_DIRECTORY -losgDBd LIBS += -L$$OSG_LIB_DIRECTORY -lOpenThreadsd } else { LIBS += -L$$OSG_LIB_DIRECTORY -losg LIBS += -L$$OSG_LIB_DIRECTORY -losgViewer LIBS += -L$$OSG_LIB_DIRECTORY -losgDB LIBS += -L$$OSG_LIB_DIRECTORY -lOpenThreads }
كتابة برنامج نصي لبناء نظام تشغيل شبيه بنظام يونكس
unix { CONFIG(debug, debug|release) { TARGET = $$join(TARGET,,,_d) LIBS += -losgd LIBS += -losgViewerd LIBS += -losgDBd LIBS += -lOpenThreadsd } else { LIBS += -losg LIBS += -losgViewer LIBS += -losgDB LIBS += -lOpenThreads } }
نقوم هنا بتكوين اسم الملف القابل للتنفيذ وتحديد المكتبات التي يجب تجميعها مع برنامجنا لخيارات البناء المختلفة: التصحيح والإصدار. تحتوي مكتبات تصحيح OSG على اللاحقة "d" بعد اسم الملف. سنضيف اللاحقة "_d" إلى الملف التنفيذي للمشروع من أجل تمييز خيار التصحيح عن نسخة الإصدار.
INCLUDEPATH += $$OSG_INCLUDE_DIRECTORY INCLUDEPATH += ./include HEADERS += $$files(./include/*.h) SOURCES += $$files(./src/*.cpp)
وأخيرًا ، نحدد مسارات البحث لملفات الرأس والملفات المضمنة في شجرة المشروع. قم بإنشاء ملف main.h فارغ في include / directory ، وملف main.cpp في src / directory. نفتح هذا المشروع في QtCreator ونقوم بتكوينه كما هو موضح في لقطة الشاشة

بعد فتح المشروع سنرى الصورة التالية

سنكتب هذا الرمز في ملف main.h
#ifndef MAIN_H #define MAIN_H #include <osgDB/ReadFile> #include <osgViewer/Viewer> #endif
بعد ذلك ، ننفذ النص الرئيسي للبرنامج في ملف main.cpp
#include "main.h" int main(int argc, char *argv[]) { (void) argc; (void) argv; osg::ref_ptr<osg::Node> root = osgDB::readNodeFile("../data/cessna.osg"); osgViewer::Viewer viewer; viewer.setSceneData(root.get()); return viewer.run(); }
يجب نسخ ملف طراز الطائرة إلى البيانات / الدليل. يمكن تنزيل هذا الملف ، بالإضافة إلى الكثير مما سيتم استخدامه في سلسلة المقالات هذه ، من
مستودع OpenSceneGraph-Dataبعد تجميع وتشغيل ، نحصل على شيء من هذا القبيل

أول سطرين من التعليمات البرمجية الخاصة بنا
(void) argc; (void) argv;
ضع علامة على معلمات الإدخال للدالة main () على أنها غير مستخدمة لتجنب تحذير المترجم. بعد ذلك ، يتم إنشاء العقدة الجذرية للمشهد ، وهو نموذج الطائرة المحملة من ملف cessna.osg
osg::ref_ptr<osg::Node> root = osgDB::readNodeFile("../data/cessna.osg");
ثم يتم إنشاء مثيل لفئة osgViewer :: Viewer - ما يسمى ب "العارض" - وهو كائن يتحكم في عرض المشهد على الشاشة. يتم تمرير بيانات المشهد إلى العارض
viewer.setSceneData(root.get());
وتبدأ دورة عرض المشهد
return viewer.run();
يحتوي هذا الرمز الأبسط بالفعل على عدد من المفاهيم الأساسية المستخدمة في OSG. لكن الحديث عنها سيذهب بعد ذلك بقليل.
الخلاصة
يمكن الحصول على شفرة المصدر الكاملة للأمثلة الموضحة فيما يلي
هنا . آمل أن يكون لهذا المنشور قراء مهتمون ،
لمواصلة ...