1. 程式人生 > >用dev-c++寫自己的第一個opengl程式

用dev-c++寫自己的第一個opengl程式

最近因為需要自己開始學習opengl,但是因為我用的是win7的作業系統,又不想為了學習這麼一個東西還要費勁的去下載安裝vs2008,所以選擇了dev-c++作為自己的開發工具。

但是由於對dev-c++不熟悉,在開始階段走了寫彎路,雖然解決了基本的問題,但是還有些問題自己沒有解決,希望能得到牛人的指點。

在這裡記錄一下自己用dev-c++開發自己第一個opengl程式的過程,一方面對自己是一個記錄和鞭策,另一方面也是給將來要學習的人一些方便,同時也提出自己遇到但是還沒有解決的問題,希望得到大家的指點。

dev-c++實際上已經包含了開發opengl程式基本的功能可以簡單的選擇:新建-multimedia-opengl,建立一個opengl程式。

這個程式包含了基本的opengl程式的結構,包括生成視窗,訊息驅動機制,還有基本的opengl程式。直接點選執行可以看到一個不斷旋轉的彩色三角形。

雖然直接在生成的程式上進行修改很方便,但是我希望用glut生成視窗和繪製(因為我看得教材是這樣的,呵呵。),也更希望能用更貼近教程的方法進行程式設計,所以決定自己動手編寫程式。

程式的程式碼很簡單,最終繪製一個白色的矩形:

#include<windows.h>
//#include<GL/gl.h>//glut.h中已經包含
//#include<GL/glu.h>
#include<GL/glut.h>

//繪製程式
void display()
{
     glClear(GL_COLOR_BUFFER_BIT);//將螢幕設定為黑色
     glColor3f(10.,1.0,1.0);//設定當前顏色狀態為白色
     glBegin(GL_POLYGON);//繪製多邊形
         glVertex3f(0.25, 0.25,0.0);
         glVertex3f(0.75,0.25,0.0);
         glVertex3f(0.75,0.75,0.0);
         glVertex3f(0.25,0.75,0.0);
     glEnd();
    
     glFlush();//傳送緩衝區
}

//初始化繪製
void init()
{
     glClearColor(0.0,0.0,0.0,0.0);//清除顏色設定
     glMatrixMode(GL_PROJECTION);//設定投影方式
     glLoadIdentity();
     glOrtho(0.0, 1.0, 0.0, 1.0,-1.0,1.0);設定投影空間
}

int main(int argc, char** argv)
{
    glutInit(&argc, argv);//初始化glut
    glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);//設定顯示模式為單緩衝,RGB模式
    glutInitWindowSize(250,250);//設定視窗大小
    glutInitWindowPosition(100,100);//設定視窗位置
    glutCreateWindow("Hello");//設定視窗標題
    init();
    glutDisplayFunc(display);
    glutMainLoop();
    return 0;
   
}

但是dev-c++本身是不包含glut.h的,所以要下載glut庫,並將glut.h拷貝到include/gl/下。
接下來我知道要包含glut32.lib,opengl32.lib,glu32.lib庫,這時問題也就來了。

起初我以為可以像使用vc一樣將這三個檔案拷貝到lib資料夾下,然後在工程選項裡將這三個庫加進來就可以了,

 

可是這時編譯時一直出現錯誤:[Linker error] undefined reference to `[email protected]'。。。

後來參考了用dev-c++直接生成的程式的設定將其改為-lopengl32,-lGlU32,-lglut32

 

這時程式才可以正常執行,開啟lib目錄看看原來程式在連結是實際上鍊接的是原來就有的libglut32.a,libglu32.a,libopengl32.a,也就是說根本不需要將glut32.lib,opengl32.lib,glu32.lib拷貝到lib下就可以運行了,結果如圖所示。

至於為什麼原來的方法不行,我在網上搜了一下據說是因為lib檔案並不是通用,所以dev-c++沒有辦法載入,但是可以直接載入dll檔案解決這個問題。不過dev-c++已經提供了很多的.a庫檔案,相信對一般的應用已經足夠了。

這是我用dev-c++編寫的第一個opengl程式,雖然並不完善但是應該對和我一樣第一次使用dev-c++編寫opengl程式或者剛剛開始使用dev-c++的人來說應該還是有所幫助。