OpenGL是流行多年的繪圖函數庫,雖然說在Windows平台中,目前以微軟的DX為最大宗,但是OpenGL擁有跨平台的特性,可以在多個平台繪圖GUI、遊戲、動畫,因此這是一個蠻實用的繪圖庫。

OpenGL並非是所有的人都應該學,因為他為最低層的函數庫,通常我們所使用的各種程式都已經把OpenGL包裝成更容易取用的函數跟方法了,所以可以使用繪圖引擎等強大功能的繪圖軟體,已很有效率的方式來解決問題。但是學習OpenGL可以學習到許多基本的概念,而且寫出來的東西比較可以隨自己的意思來顯示,因此,假如有興趣就看OpenGL Guide來學吧 :)

 

OpenGL Programming Guide網址〈英文〉:(也有出書,但是匹貴〉

http://www.glprogramming.com/red/index.html

 

 

OpenGL需要一個視窗來乘載,在這邊使用GLFW來當作負載,IDE使用CodeBlocks 10.05 ,這邊編譯器採用TDM GCC,而不使用其安裝程式內建的那個。這是因為,這內建的編譯器有點舊,而且有BUG,之前都有遇到莫名其妙的問題,換個編譯器才解決。

 

1. 下載 CodeBlocks from  http://www.codeblocks.org/downloads/26

01  

2. 下載 GLFW from http://www.glfw.org/download.html (筆者下載64bit版)

02  

3. 下載 TDM-GCC from http://tdm-gcc.tdragon.net/download (依自己喜好,安裝編譯器  注意!!安裝不同的編譯器,LINKER可能需要參數設定並不相同)(筆者下載64bit版)

03  

4. 安裝 CodeBlocks 、 TDM-GCC編譯器 (檔案請放在全英文目錄,不確定是否能正常執行於中文目錄底下,請保有良好習慣,英文語系國家對其餘語系有好度不高)

04  

5. 解壓縮 GLFW 於 自定義目錄下 ( IDE等候設定路徑之後即可使用,並不用跟IDE或編譯器放在一起 )

05  

6.開啟 CodeBlocks 10.05  

由於他找不到GCC編譯器,因此這邊按ok就好。 ( 有些人電腦可以已經有編譯器了,請依個人環境來調整 )

另外,筆者在這邊說明一下,既然接觸程式界,那麼就應該有看懂遇到的英文的能力,因為許多library都是用英文所以寫的,有些函數庫太簡單使用,就不會有中文手冊可以看( 其實筆者原本也想把GLFW的手冊翻成中文,後來發現那太沒有效率了,因為裡面用的字都很好懂,函數也很輕鬆上手,所以就作罷不翻 )。不然就是太冷門、太新也只有英文看,所以英文要多練練阿...

06  

 7. 設定 GLFW函數庫路徑與參數  

Settings -> Compiler and debugger -> Linker settings -> Add -> ( 選擇 GLFW 目錄 lib-mingw 資料夾下的 兩個檔案 libglfw.a libglfwll.a ) -> OK

右邊 Other linker options打入 GLFW官網寫的所需要參數  -lglfw -lopengl32  ( 參數跟參數之間必須用空格隔開) 

( 注意!! 假如這邊使用的是非筆者使用的編譯器  那其所需要參數 請至 http://www.glfw.org/release-2.7.7.html  查詢 )

07  

08  

8.設定編譯器路徑

Settings -> Compiler and debugger -> Toolchain executables 

於底下設定各Tools之路徑

09  

9.設定 GLFW directories

Settings -> Compiler and debugger -> Search directories -> Compiler -> Add -> ( 選擇 GLFW 目錄下 include 資料夾 ) -> OK

Settings -> Compiler and debugger -> Search directories -> Linker -> Add -> ( 選擇 GLFW 目錄下 lib-WIN64 資料夾 ) -> OK

10  

10. 環境建構完成

在這個時候就可以試著執行 Hello World! 之類的程式 來測試是否正常  異常排除請靠自己了-.-

 

簡單C程式測試碼:

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    printf("shit");

結果:

不解釋了...

 

簡單GLFW呼叫視窗程式碼:(旁邊有些被強制換行了  記得FIX)

#include <stdio.h>
#include <stdlib.h>
#include <GL\glfw.h>

int main(void)
{
    if( !glfwInit() )  /* glfw初始化函數 */
    {
        printf("初始化失敗\n");
    }
    if( !glfwOpenWindow( 320, 240, 0, 0, 0, 0, 0, 0, GLFW_WINDOW ) )   /* glfw創建視窗函數 失敗回傳1 */
    {
        printf("創建視窗失敗\n");
    }
    for(;;)
   {
        glfwSwapBuffers();//if要按鍵輸入 必打這行 這行用途手冊寫比較詳細
        if( glfwGetKey( GLFW_KEY_ESC)||!glfwGetWindowParam( GLFW_OPENED ) )   /* 發現輸入ESCor關閉視窗跳出 一樣有回傳值 */
        {
            printf("exit\n");
            glfwTerminate();  /* glfw關閉用 */
            break;
        }
    }
    printf("Program stop\n");
    return 0;
}

 

結果:

11  

 

抄OpenGL Guide第一章範例+GLFW視窗程式碼: ( 隨便打的 goto指令請少用  非必要千萬不要用 不然很容易花掉 不容易Debug )

#include <stdio.h>
#include <stdlib.h>
#include <GL/glfw.h>

void display(void)
{
    glClear (GL_COLOR_BUFFER_BIT);
    glColor3f (1.0, 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 (void)
{
    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()
{
    glfwInit();
    printf("glfw start");
    glfwOpenWindow( 250, 250, 0, 0, 0, 0, 0, 0, GLFW_WINDOW );
    glfwSetWindowTitle( "HELLO" );
    init ();
    again:
    display();
    glfwSwapBuffers();
    if( glfwGetKey( GLFW_KEY_ESC )||( !glfwGetWindowParam( GLFW_OPENED ) ))
    {
        glfwTerminate();
        return 0;
    }
    goto again;
    return 0;
}

 

 

結果:

12  

 

請勿任意轉貼,打字P圖很累,要轉貼請寫出處 ( 這頁的網址 XD ) , 希望大家都能遵守,因為P浮水印也很累==|||

arrow
arrow
    全站熱搜

    gta45297 發表在 痞客邦 留言(0) 人氣()