Bu dönem aldığım bilgisayar grafikleri dersi için OpenGL öğreniyorum ve dersin projesini hiç sevmeye sevmeye GLUT ile yapmak zorundayım. (GLFW kullanmak daha rahat bana sorarsanız.) Dolayısıyla, C++ kullanarak rahatça OpenGL denemeleri yapabileceğim düzgün bir proje ortamı hazırlamam gerekti. Bu noktada ise en temiz çözümü CMake sağlıyor zira CMake ile derlenebilen projeler çok düzgün hata çıktıları veriyor ve en ideal Makefile dosyalarını otomatik olarak oluşturuyor.
Sistemi hazırlamak için, öncelikle gerekli paketleri kurun (Debian/Ubuntu):
1 | $ sudo apt-get install g++ cmake freeglut3 freeglut3-dev libxmu-dev libxi-dev |
Ardından hızlıca bir CMake projesi oluşturmak için, CMakeLists.txt adlı bir dosya oluşturun ve içine alttakileri kopyalayın:
1 2 3 4 5 6 7 8 9 | cmake_minimum_required(VERSION 2.8) project(ProjeAdi) find_package(OpenGL REQUIRED) find_package(GLUT REQUIRED) include_directories( ${OPENGL_INCLUDE_DIRS} ${GLUT_INCLUDE_DIRS} ) add_executable(app main.cpp) target_link_libraries(app ${OPENGL_LIBRARIES} ${GLUT_LIBRARY} ) |
Satır satır açıklama:
- Proje için gerekli olan CMake’in minimum sürümünü (versiyonunu) belirliyoruz. Eğer çok fantastik şeyler peşinde değilseniz, mümkün olduğunda düşük yapın.
- Proje adı. Keyfinize göre isim verin. Genellikle bulunduğu klasörün ismini alması idealdir.
- OpenGL’in CMake dosyaları içe aktarılıyor.
- GLUT’ın CMake dosyaları içe aktarılıyor.
- OpenGL ve GLUT’ın başlık (header) dosyalarının konumları içe aktarılıyor. Eğer bunlar zaten işletim sisteminin kayıtlı konumlarda ise bunu yapmanıza gerek yoktur, otomatik ayarlanır. Yine de garantiye alıp yazın.
- app adında, main.cpp dosyasından oluşturulan bir çalıştırılabilir dosya oluşturuyoruz. Derlenen program app adlı dosya olacak. (Başka cpp dosyaları da kullanıyorsanız, buraya ekleyin.)
- Derlemeden önce, gerekli kütüphaneler bağlanıyor. Buradaki çalıştırılabilir dosya ismi üsttekiyle aynı olmak zorunda.
Sonrasında örnek bir C++ kodu ile sistemin çalışıp çalışmadığını test edelim. main.cpp adlı bir dosya oluşturun, içine alttakileri kopyalayın ve CMakeList.txt dosyasıyla aynı klasöre koyun.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 | #include <cmath> #include <GL/glut.h> float distance = 5.0f; float angle = 0.0f; void keyboard(unsigned char key, int x, int y) { if (key == 'q' || key == 'Q') { exit(0); } } void idle() { float xc; float zc; angle += 0.5f; if (angle > 360.0f) { angle = 0.0f; } xc = distance * cos(angle / 180.0 * M_PI); zc = distance * sin(angle / 180.0 * M_PI); glLoadIdentity(); gluLookAt(xc, 0.0f, zc, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f); glutPostRedisplay(); } void display() { glClear(GL_COLOR_BUFFER_BIT); glColor3f(1.0f, 1.0f, 1.0f); glutWireTeapot(1); glutSwapBuffers(); } int main(int argc, char **argv) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB); glutCreateWindow("Glut OpenGL"); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(50.0f, 1.0f, 3.0f, 7.0f); glMatrixMode(GL_MODELVIEW); glutKeyboardFunc(keyboard); glutDisplayFunc(display); glutIdleFunc(idle); glutMainLoop(); return 0; } |
Makefile dosyanızı oluşturmak için, kodun bulunduğu klasörde şu komutu verin:
1 | $ cmake . |
cmake komutuna argüman olarak, CMakeLists.txt dosyasının adresini değil, bulunduğu klasörü vermeniz gerekiyor. Zaten bu durumda da ”.” bulunulan klasörü işaret ediyor. Bir sıkıntı olmazsa Makefile dosyanız oluşacak. Ardından make komutunu verin ve uygulamayı derleyin:
1 | $ make |
Komutun çıktısının son kısımları, şunun gibiyse, bir sıkıntı yok demektir:
1 2 3 | [100%] Building CXX object CMakeFiles/app.dir/test01.cpp.o Linking CXX executable app [100%] Built target app |
Ardından uygulamayı çalıştırın. Bir sıkıntı olmazsa, ekran görüntüsündeki gibi bir görüntü elde etmeniz lazım:
Bir de, eğer C++11 standartlarını kullanmak istiyorsanız, CMakeLists.txt dosyasının içine girin ve project satırının hemen altına şunu ekleyin:
1 | set(CMAKE_CXX_FLAGS "-std=c++11") |