
Pendahuluan
OpenSceneGraph (selanjutnya disebut sebagai OSG) adalah kerangka kerja lintas-platform terbuka yang ditulis dalam C ++ dan mewakili mesin grafis yang menyediakan programmer dengan antarmuka objek untuk OpenGL. Di negara kami, mesin ini tidak terlalu populer, bahkan di Habré saya hanya melihat satu
publikasi yang kurang lebih baik tentangnya . OSG banyak digunakan di luar negeri di mana, misalnya, itu adalah dasar untuk simulator penerbangan
FlightGear gratis, ada implementasi terbuka dari permainan Morrowind, yang disebut
OpenMW, pengembangan yang juga ditransfer ke OSG dari mesin
Ogre . Dokumentasi berbahasa Rusia di atasnya sangat kecil, dan di antara dokumentasi berbahasa Inggris, hanya serangkaian buku dari pengembang yang dapat dicatat:
OpenSceneGraph 3.0. Panduan Pemula dan
OpenSceneGraph 3. Cookbook .
Kendati demikian, mesinnya cukup menarik karena alasan berikut:
- Implementasi lintas platform terbuka di C ++.
- Arsitektur modular.
- Ekstensibilitas melalui sistem plugin bawaan.
- Kemungkinan pemrosesan multithreaded data grafik dan alat bawaan untuk implementasinya
- Manajemen memori dinamis melalui mekanisme penunjuk cerdas
Saya pikir itu akan menarik bagi pembaca Habr untuk berkenalan dengan proyek ini secara lebih rinci. Pengisian ulang basis pengetahuan OSG berbahasa Rusia tidak akan berlebihan. Semua materi yang akan saya terbitkan tentang topik ini didasarkan pada buku
OpenSceneGraph 3.0. Panduan Pemula , tetapi bukan terjemahannya, melainkan revisi kreatif dari materi yang disajikan di sana. Jika Anda tertarik dengan topik ini, saya minta potongan
Satu-satunya cara pasti untuk mendapatkan versi terbaru OSG pada mesin Anda adalah dengan membangun perpustakaan dari sumbernya. Penginstal biner yang ada untuk Windows berfokus pada kompiler MS Visual C ++. Bagi saya, untuk proyek saya perlu menggunakan kompiler GCC, atau lebih tepatnya versi MinGW32, yang termasuk dalam penyediaan alat pengembangan kerangka Qt. Jadi kita membutuhkan:
- Kerangka kerja Qt yang diinstal dan dikonfigurasi dengan kompiler MinGW32 versi 5.3 dan QtCreator IDE
- Git Client untuk Windows
- Utilitas Cmake untuk Windows
Pembaca diharapkan terbiasa dengan IDE QtCreator dan sistem build qmake yang digunakan dalam proyek Qt. Selain itu, diasumsikan bahwa pembaca mengetahui dasar-dasar penggunaan sistem kontrol versi Git dan pada prinsipnya tidak memiliki keterampilan pemrograman nol.
1. Mendapatkan Sumber OpenSceneGraph
Kami membuat direktori pada hard drive kami di mana kami akan membangun OSG, misalnya, di sepanjang jalur D: \ OSG

Kami akan pergi ke direktori ini dan mendapatkan sumber dari
repositori OSG resmi di GithubD:\OSG> git clone https:
Lamanya proses pengunduhan tergantung pada seberapa lebar saluran akses Internet Anda. Cepat atau lambat, kami akan menerima salinan lokal dari repositori OSG.
Setelah mengunduh sumber, buat direktori build-win32-debug terdekat

Dalam katalog ini kita akan membangun kit debugging OSG. Tapi sebelumnya
2. Konfigurasikan cmake
Agar cmake berfungsi dengan benar, kita perlu mengedit
file install-path-cmake \ share \ cmake-3.13 \ Modul \ CMakeMinGWFindMake.cmake . Secara default, tampilannya seperti ini
Kami berkomentar beberapa baris di dalamnya, sehingga utilitas tidak mencoba mencari shell Unix di sistem kami, dan jika tidak menemukannya, itu berakhir dengan kesalahan
3. Perakitan dan pemasangan versi debug dan lepaskan mesin
Sekarang jalankan cmd shell, shortcut yang terletak di Start-> Program-> Qt-> Qt 5.11.2-> Qt 5.11.2 untuk Desktop (MinGW 5.3.0 32bit)

Sesi baris perintah yang sedang berjalan mengatur seluruh lingkungan yang diperlukan agar alat build mingw32 berfungsi. Pergi ke direktori sumber OSG
C:\Qt\Qt5.11.2\5.11.2\mingw53_32>D: D:\> cd OSG\build-win32-debug
Berikan perintah
D:\OSG\build-win32-debug>cmake -G "MinGW Makefiles" -DCMAKE_INSTALL_PREFIX=E:\Apps\OSG -DCMAKE_BUILD_TYPE=DEBUG ../OpenSceneGraph
Mari kita menganalisis makna parameter secara lebih rinci:
- -G "MinGW Makefiles" - menunjukkan bahwa perlu membuat Makefile untuk utilitas mingw32-make
- -DCMAKE_INSTALL_PREFIX = E: \ Apps \ OSG - tetapkan jalur di mana OSG akan diinstal
- -DCMAKE_BUILD_TYPE = DEBUG - menunjukkan bahwa versi debug mesin harus dibuat.
Eksekusi perintah memeriksa kesiapan lingkungan untuk perakitan, menghasilkan skrip build dan knalpot berikutnya
Buat knalpot saat mengkonfigurasi OSG build -- 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
configure (hilang: 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) (versi ditemukan "") -- 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
memberi tahu kami bahwa Anda dapat mulai merakit. Berikan perintah
D:\OSG\build-win32-debug>mingw32-make -j9
Anda dapat, seperti dalam contoh saya, tentukan jumlah utas perakitan jika Anda memiliki prosesor multi-inti (-j switch). Proses pembuatan akan dimulai, memakan waktu sekitar delapan menit di komputer saya

Di akhir pertemuan, instal perpustakaan
D:\OSG\build-win32-debug> mingw32-make install
setelah menjalankan perintah, kami menemukan pustaka terinstal di jalur yang sebelumnya kami atur

Sekarang mari kita membangun versi rilis mesin dengan membuat direktori build lain
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. Mengatur variabel lingkungan
Lokasi pustaka OSG setelah instalasi dapat berupa apa saja - ditentukan oleh keinginan pengguna tertentu dan kemampuannya untuk menempatkan file di komputer. Pada saat yang sama, ketika menyiapkan proyek tertentu yang menggunakan data, perpustakaan memerlukan penyatuan tertentu, abstrak dari lokasi spesifik perpustakaan.
Mari kita buat beberapa variabel lingkungan sistem yang menunjukkan jalur ke pustaka, file header dan plugin OSG. Dalam contoh saya, akan terlihat seperti ini

Kita perlu membuat variabel yang namanya dilingkari merah di tangkapan layar. Setelah membuat variabel, agar terlihat oleh alat pengembangan, khususnya, QtCreator harus setidaknya masuk ke sistem (logout dan login sebagai pengguna saat ini) atau, mungkin, reboot sistem (ini adalah Windows!)
Setelah itu, prosedur untuk menginstal OSG di komputer kita dapat dianggap lengkap.
5. Menulis Hello World ke QtCreator
Kami akan mulai berkenalan dengan mesin grafis OpenSceneGraph dengan contoh sederhana, seperti biasa dalam pemrograman dengan "Halo dunia!"
Sebelum menulis kode apa pun, kami akan mengonfigurasi proyek kami untuk sistem build qmake, yang akan kami gunakan di seluruh rangkaian artikel. Di tempat sistem file yang menarik minat kami, buat struktur direktori berikut
OSG-lessons/ |-data/ |-OSG-lessons/ | |-hello/ |-include/ |-src/
Di direktori halo, buat file
hello.pro dengan konten berikut
Teks lengkap 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)
Kami akan menganalisis surat-surat ini secara lebih rinci.
TEMPLATE = app TARGET = hello DESTDIR = ../../bin
Variabel menentukan templat proyek (aplikasi - aplikasi), nama file yang dapat dieksekusi (halo) dan direktori tempat file yang dapat dieksekusi ditempatkan setelah perakitan.
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 }
Bergantung pada OS tempat proyek dirakit, kami mendefinisikan variabel yang menunjukkan path ke direktori library dan file header OSG. Di sinilah variabel lingkungan OSG_BIN_PATH dan OSG_INCLUDE_PATH berguna - sekarang tidak masalah di mana pustaka OSG diinstal. Siapa pun yang ingin bekerja dengan proyek ini di komputer mereka hanya akan menulis variabel lingkungan yang sesuai dalam sistem mereka tanpa mengedit skrip pembuatan.
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 }
Menulis skrip untuk membangun OS yang mirip unix
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 } }
Di sini kita mengkonfigurasi nama file yang dapat dieksekusi dan menentukan pustaka yang harus dikompilasi dengan program kami untuk berbagai opsi build: baik debug dan rilis. Pustaka debug OSG memiliki akhiran "d" setelah nama file. Kami akan menambahkan akhiran "_d" ke file proyek yang dapat dieksekusi untuk membedakan opsi debug dari versi rilis.
INCLUDEPATH += $$OSG_INCLUDE_DIRECTORY INCLUDEPATH += ./include HEADERS += $$files(./include/*.h) SOURCES += $$files(./src/*.cpp)
Dan akhirnya, kami menentukan jalur pencarian untuk file header dan file yang termasuk dalam pohon proyek. Buat file main.h kosong di direktori include /, dan file main.cpp di direktori src /. Kami membuka proyek ini di QtCreator dan mengkonfigurasinya seperti yang ditunjukkan pada tangkapan layar

Setelah membuka proyek, kita akan melihat gambar berikut

Kami akan menulis kode seperti itu di file main.h
#ifndef MAIN_H #define MAIN_H #include <osgDB/ReadFile> #include <osgViewer/Viewer> #endif
Selanjutnya, kami mengimplementasikan tubuh utama program dalam file 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(); }
File model pesawat harus disalin ke data / direktori. File ini, dan juga apa yang akan digunakan dalam seri artikel ini, dapat diunduh dari
repositori OpenSceneGraph-DataSetelah mengkompilasi dan menjalankan, kita mendapatkan sesuatu seperti ini

Dua baris pertama dari kode kita
(void) argc; (void) argv;
tandai parameter input fungsi utama () sebagai tidak digunakan untuk menghindari peringatan kompiler. Selanjutnya, simpul akar adegan dibuat, yang merupakan model pesawat dimuat dari file cessna.osg
osg::ref_ptr<osg::Node> root = osgDB::readNodeFile("../data/cessna.osg");
Kemudian sebuah instance dari kelas osgViewer :: Viewer dibuat - yang disebut "viewer" - sebuah objek yang mengontrol tampilan adegan di layar. Data pemandangan diteruskan ke pemirsa
viewer.setSceneData(root.get());
dan siklus rendering adegan dimulai
return viewer.run();
Kode paling sederhana ini sudah mengandung sejumlah konsep dasar yang digunakan dalam OSG. Tetapi berbicara tentang mereka akan berjalan sedikit kemudian.
Kesimpulan
Kode sumber lengkap untuk contoh-contoh yang dijelaskan selanjutnya
dapat diperoleh di sini . Saya berharap publikasi ini menarik minat pembaca,
untuk dilanjutkan ...