update: 2012/09/06
reference:
1. OpenGL Video Tutorial - Getting OpenGL Set Up on Linux
2. Howto Install OpenGL Development Environment
3. Computing Reference Wikispace - geany_settings
4. GLEW: The OpenGL Extension Wrangler Library
開發環境設定與繪圖測試
A. 檢查 OpenGL 與 GLUT 開發函式庫
1. 說明:
要讓 OpenGL 在 Linux 上正常運作, 至少要在檔案中找到 gl.h 與 glut.h 檔案,
它們通常位於 /usr/include/GL/ 目錄下.
2. 檢查:
$ cd /usr/include/GL/
$ ls
B. 安裝 IDE(整合開發環境)
1. Menu > Software Manager
或直接執行
$ sudo apt-get install geany
------------------------------------------------------------------------------------
C. 開發環境設定與繪圖測試
1. 開啟 Geany
Menu > All applications (選單右上方)
> Programming > Geany
Edit > Preferences
General > Startup > Project files:
/home/lanli/projects
/home/lanli/projects
$ cd ~
$ mkdir projects
4. 新增 OpenGL 測試檔案
開啓新檔案, 寫入以下程式碼, 存檔至 /home/lanli/projects/teapot.c
#include <GL/glut.h> void init(); void display(); int main(int argc, char* argv[]) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE); glutInitWindowPosition(0, 0); glutInitWindowSize(300, 300); glutCreateWindow("OpenGL 3D View"); init(); glutDisplayFunc(display); glutMainLoop(); return 0; } void init() { glClearColor(0.0, 0.0, 0.0, 0.0); glMatrixMode(GL_PROJECTION); glOrtho(-5, 5, -5, 5, 5, 15); glMatrixMode(GL_MODELVIEW); gluLookAt(0, 0, 10, 0, 0, 0, 0, 1, 0); } void display() { glClear(GL_COLOR_BUFFER_BIT); glColor3f(1.0, 0, 0); glutWireTeapot(3); glFlush(); }
5. 查看編譯設定
Build > Set Build Commands
(update: 2012/08/22)
a. 將 Build 的 Command 改成:
gcc -Wall -o "%e.o" "%f" -lglut -lGL -lGLU -lSDL // -lSDL 非必要
b. 將 Execute 的 Command 改成: "./%e.o" // 添加 .o
a. Build > Build
b. Build > Execute
------------------------------------------------------------------------------------
D. 使用 GLEW 的方式: (update: 2012/08/30)
1. 說明:
a. 調整編譯設定:
將 Build 的 Command 改成:
gcc -Wall -o "%e.o" "%f" -lglut -lGLEW -lGL -lGLU
b. 如果 GLEW 要跟 GLUT 一起使用的話, 必須要先 include glew.h, 然後才
include glut.h, 並且 glew.h 已經有 include glu.h 了.
c. GLEW 的初始化必須要在全部的 glutInitxxx 及 glutCreateWindow 之後進行.
(可以在註冊 callback functions 動作之前)
*******************************************************
2. 將 teapot.c 修改如下:
#include <stdio.h> #include <stdlib.h> #include <GL/glew.h> #include <GL/glut.h> void init(); void display(); void initGlew(); int main(int argc, char* argv[]) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE); glutInitWindowPosition(0, 0); glutInitWindowSize(300, 300); glutCreateWindow("OpenGL 3D View"); initGlew(); init(); glutDisplayFunc(display); glutMainLoop(); return 0; } void init() { glClearColor(0.0, 0.0, 0.0, 0.0); glMatrixMode(GL_PROJECTION); glOrtho(-5, 5, -5, 5, 5, 15); glMatrixMode(GL_MODELVIEW); gluLookAt(0, 0, 10, 0, 0, 0, 0, 1, 0); } void display() { glClear(GL_COLOR_BUFFER_BIT); glColor3f(1.0, 0, 0); glutWireTeapot(3); glFlush(); }
void initGlew()
{
GLenum err = glewInit();
if(err != GLEW_OK)
{
fprintf(stderr, "glewInitError\n");
exit(1);
}
fprintf(stderr, "GLEW initialized OK\n");
fprintf(stderr, "Status: Using GLEW %s\n", glewGetString(GLEW_VERSION));
}
*******************************************************
3. 編譯並執行
a. Build > Build
b. Build > Execute
------------------------------------------------------------------------------------
E. 備註: (update: 2012/09/06)
1. 後來在 geany 下使用 extern 變數時, 會造成編譯失敗的情況.
....
extern void checkGLErrors(const char* caller);
....
checkGLErrors("main here");
....
*****************************************************
main.c:(.text+0x70): undefined reference to `checkGLErrors'
編譯失敗
2. 試過安裝 codeblocks 來建立 OpenGL 專案, 編譯時也會出問題
(可能是我不太熟 codeblocks).
3. 所以, 之後會改用 eclipse 來開發 OpenGL.