2012年10月2日 星期二

Get OpenMesh Libraries for Visual Studio 2010

since: 2012/10/02
update: 2012/10/02

reference:
1. RWTH Graphics: OpenMesh
2. OpenMesh: Compiling OpenMesh

A. 說明:
     1. 從 OpenMesh 官網取得 OpenMesh Libraries 的方式有三個:
         a. 從 RWTH Graphics: Download 下載最新的 Precompiled Binaries
              (Windows Binary setups) 來安裝.(目前為: OpenMesh 2.2)

         b. 從 RWTH Graphics: Download 下載最新的 Source Code
             (目前為: OpenMesh 2.2), 解壓縮後開啟內附的 Visual Studio 專案檔,
             在 Visual Studio 裡進行編譯的工作.

         c. 從 RWTH Graphics: Download 下載最新的 Source Code
             (目前為: OpenMesh 2.2), 解壓縮後先進行編譯來產生  Visual Studio 專案檔,
             然後再開啟該 Visual Studio 專案檔 來進行編譯的工作.

     2. 以下會記錄這三種方式, 並且記錄其產生的 Libraries 與 Headers 目錄位置,
         以提供之後的專案使用; a. 是最容易的方式且似乎看不到錯誤訊息, b. 次之,
          c. 是較不易處理的方式.

     3. 之後有使用到 OpenMesh 的專案, 會先使用 a. Precompiled Binaries 的檔案,
         如果有問題的話, 再改用 b. 所產生的檔案. (c. 算是沒有完全成功的)

--------------------------------------------------------------------------------------------

B. 方式一: 安裝 Precompiled Binaries
     1. 到 RWTH Graphics: Download 下載:
         Precompiled Binaries (Windows Binary setups):
         OpenMesh 2.2 (32-bit VS2010)
         檔名: OpenMesh-2.2-VS2010.exe

     2. 安裝後, 預設位置為: C:\Program Files (x86)\OpenMesh 2.2

     3. OpenMesh Libraries 目錄位置
         C:\Program Files (x86)\OpenMesh 2.2\lib
          內含: OpenMeshCore.lib
                    OpenMeshCored.lib
                    OpenMeshTools.lib
                    OpenMeshToolsd.lib
                    (有 d 的為 debug 版本)

     4. OpenMesh Headers 目錄位置
          C:\Program Files (x86)\OpenMesh 2.2\include

--------------------------------------------------------------------------------------------

C. 方式二: 使用預設的  Visual Studio 專案檔來編譯
     1. 到 RWTH Graphics: Download 下載最新的 Source Code:
         OpenMesh 2.2 ( zip ), 檔名: OpenMesh-2.2.zip

     2. 將 OpenMesh-2.2.zip 解壓縮後(在此為 C:\Lanli\projects\OpenMesh-2.2),
         開啟 VS2008OpenMesh.sln 檔案, 由於我安裝的是 Visual Studio 2010,
         因此會啟動 "轉換精靈" 進行轉換.(在此, 選擇: 轉換前不建立備份)

     3. 接著, 將轉換後的方案, 分別建置 Debug 與 Release 的版本.
         Debug 版: 建置: 3 成功、0 失敗、0 最新、0 略過
         Release 版: 建置: 3 成功、0 失敗、0 最新、0 略過

     4. OpenMesh Libraries 目錄位置
          C:\Lanli\projects\OpenMesh-2.2\lib
          內含: libOpenMeshCore.lib
                    libOpenMeshCored.lib
                    libOpenMeshTools.lib
                    libOpenMeshToolsd.lib
                    (有 d 的為 debug 版本)

     5. OpenMesh Headers 目錄位置
         C:\Lanli\projects\OpenMesh-2.2\src

--------------------------------------------------------------------------------------------

D. 方式三: 編譯 Source Code
     1. 到 RWTH Graphics: Download 下載最新的 Source Code:
         OpenMesh 2.2 ( zip ), 檔名: OpenMesh-2.2.zip

     2. 將 OpenMesh-2.2.zip 解壓縮後更名
        
(在此為 C:\Lanli\projects\OpenMesh-2.2-build)

*******************************************************************

     3. 安裝以下軟體:
          a. CMake - Cross Platform Make:
              Binary distributions: Windows (Win32 Installer) > cmake-2.8.9-win32-x86.exe             
          b. Qt framework:
              Qt libraries 4.8.3 for Windows (VS 2010, 235 MB)
              檔名: qt-win-opensource-4.8.3-vs2010.exe

          c. Doxygen:
              A binary distribution for Windows: doxygen-1.8.2-setup.exe

          d. GLUT:
              GLUT 3.7 Source Code Download for Win32
              檔名: glut37.zip
               (1). 先用文字編輯器開啟以下檔案:
                      C:\Lanli\projects\OpenMesh-2.2-build\cmake\FindGLUT.cmake
                      可以看到 glut 預設的目錄位置是在 C:/libs 下:
IF (WIN32)
  FIND_PATH( GLUT_INCLUDE_DIR NAMES GL/glut.h
    PATHS  ${GLUT_ROOT_PATH}/include
           "C:/libs/glut-3.7/include" )
  FIND_LIBRARY( GLUT_glut_LIBRARY NAMES glut32 glut
    PATHS
    ${OPENGL_LIBRARY_DIR}
    ${GLUT_ROOT_PATH}/Release
    "C:/libs/glut-3.7/lib"
    )
ELSE (WIN32)


               (2). 先在 C:/ 下建立 libs 資料夾, 然後將 glut37.zip 解壓縮到其下.

               (3). 可以看到 include 與 lib 的目錄位置, 但是 lib 目錄內卻沒有 .lib 檔案.
                      C:\libs\glut-3.7\include
                      C:\libs\glut-3.7\lib

               (4). 所以需要自行編譯來產生 .lib 檔案, 編譯方式如下:
                      (說明: 在此, 我還沒有編譯成功)
                      (a). 先看 C:\libs\glut-3.7\README.win 檔案的說明.
                      (b). 將 C:\libs\glut-3.7\glutwin32.mak  檔案, 取消唯讀屬性.
                      (c). 用文字編輯器開啟 glutwin32.mak 檔案, 修改如下:
                            (可能還要修改其它項目)
# Win95 dll directory
DLLINSTALL     = \windows\system

# WinNT dll directory
#DLLINSTALL     = \winnt\system32


                      (d). 由於 glutmake.bat 使用了 nmake 來編譯; 而 nmake 是屬於 VisualC++
                             編譯器系統的一部分. 因此, 必須要讓目前的環境能在 Visual Studio 的
                             外部來使用 VisualC++ 的編譯器系統, 方式如下:

                             將 C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin 下的
                             vcvars32.bat 檔 copy 到 C:\libs\glut-3.7 目錄下.
                             進入 "命令提示字元" :
                              C:\>cd libs\glut-3.7
                              C:\libs\glut-3.7>vcvars32.bat
                               Setting environment for using Microsoft Visual Studio 2010 x86 tools.

                      (e). 進行編譯:
                             C:\libs\glut-3.7>glutmake.bat

               (5). 由於編譯失敗, 因此改成如下的方式:
                      (a). 到 Nate Robins - OpenGL - GLUT for Win32 下載:
                             glut-3.7.6-bin.zip (117 KB) , 檔名: glut-3.7.6-bin.zip  
                      (6). 解壓縮後, 將 glut32.lib copy 到 C:\libs\glut-3.7\lib 目錄下.

*******************************************************************

     4. 執行 cmake-gui 程式
         a. 設定 source code 的位置: (OpenMesh 最上層的目錄)
             C:/Lanli/projects/OpenMesh-2.2-build

         b. 設定 build 的位置: (先在 OpenMesh 最上層的目錄, 建立 build 資料夾)
             C:\Lanli\projects\OpenMesh-2.2-build\build

         c. 按下 "Configure"
             Specify the generator for this project:
              Visual Studio 10
              Use default native compilers
               > Finish

         d. 按下 "Generate"
************************************************************
* ACG Buildsystem *
* *
* Package : OpenMesh *
* Version : 2.2 *
************************************************************
Configuring done
Generating done
// 完成

     5. 開啟 C:\Lanli\projects\OpenMesh-2.2-build\build\OpenMesh.sln 檔案
         (Visual Studio 的專案檔)

     6. 對開啟的方案, 分別建置 Debug 與 Release 的版本.
         Debug 版: 建置: 17 成功、2 失敗、0 最新、5 略過
         Release 版: 全部重建: 15 成功、4 失敗、 5 略過

     7. OpenMesh Libraries 目錄位置:
         C:\Lanli\projects\OpenMesh-2.2-build\build\Build\lib
          內含:
                    OpenMeshCored.lib
                    OpenMeshToolsd.lib
                    (有 d 的為 debug 版本)

     8. OpenMesh Headers 目錄位置
         C:\Lanli\projects\OpenMesh-2.2-build\src

2012年9月23日 星期日

Create a Windows Forms Application in Visual C++

since: 2012/09/23
update: 2012/09/23

reference:
1. 使用 .NET Framework 建立 Windows Form 應用程式 (C++)
2. CPP_CLI_tutorial

A. 說明:
     1. 目前學習的環境已不偏重在 iOS 平台上, 近期內應該大多會在 Windows 上,
         學習的內容為: 電腦圖學, 影像處理與網格(Mesh)處理.

     2. 開發環境:  Windows 7 (64bit) + Visual Studio 2010 + Visual Assist X

     3. 如果遇到有版權的問題, 可能就不會記錄完整的程式碼.

---------------------------------------------------------------------------------

B. 建立新專案:
     1. VS 2010 > 檔案 > 新增 > 專案

     2. Visual C++ > CLR > .Net Framework4 >
         Windows Form 應用程式 >
         名稱: winformsapp
         位置: C:\Lanli\projects\
         為方案建立目錄: 取消勾選
          > 確定

---------------------------------------------------------------------------------

C. 為工具箱加入 "索引標籤" 與 "客製化控制項":
    1. 加入 "索引標籤":
        展開工具箱 > 滑鼠右鍵 > 加入索引標籤 >
        輸入標籤名稱: (ex: OpenGL)

    2. 加入 "客製化控制項":
         a. 搜尋網路上的資源, 下載 "客製化控制項" 的 .dll 檔(ex: MyPanel.dll),
             將其複製到某個目錄下, ex: C:\Lanli\GL_LIB\
                        
         b. 在剛剛新增好的 "索引標籤" 上: 滑鼠右鍵 > 選擇項目

         c. .NET Framework 元件 >瀏覽
          > 選取剛剛存放 MyPanel.dll 檔案的位置 (C:\Lanli\GL_LIB\MyPanel.dll)
          > 開啟舊檔
          > 確定

         d. 完成後, 即可在工具箱內看到該元件.

---------------------------------------------------------------------------------

D. 專案屬性
     點選該專案(ex: winformsapp) > 滑鼠右鍵 > 屬性:

     1. 通用屬性 > 架構和參考 > 加入新參考

      > 瀏覽 > (元件檔類型檔案) > 確定

     2. 組態屬性 > 一般:
         字元集: 使用 Unicode 字元集
         Common Language Runtime 支援: Common Language Runtime 支援 (/clr)
          > 確定

     3. 組態屬性 > C/C++ > 一般:
         Common Language Runtime 支援: Common Language Runtime 支援 (/clr)
          > 確定


     4. 組態屬性 > C/C++ > 程式碼產生:
          執行階段程式庫: 多執行緒偵錯 DLL (/MDd)
          > 確定

---------------------------------------------------------------------------------

E. 其它

     1. 可由專案中的 Form1.h 來切換 Form 的 "程式碼" 與 "設計工具".
         備註: 當專案日漸龐大時, 開啟 "設計工具" 前, 可先執行:
                   建置 > 清除 "該專案" , 以獲得較好的執行效率.

     2. 從 "工具箱" 將某個 "控制項" 拖拉放到 "設計工具" 上,
         點選 "控制項" 元件 > 滑鼠右鍵 > 屬性 > Dock
          ---> 調整該控制項元件的 Dock 位置.

     3. 工具箱 > 事件(閃電符號):
         Mousexxx Event
         ....
         Paint

2012年9月20日 星期四

Create a GLSL based project on Linux

since: 2012/09/20
update: 2012/09/20

reference:
1. OpenGL® Application Binary Interface for Linux
2. Getting Started with the OpenGL Shading Language (GLSL)
3. I touchs: Setting up Eclipse for OpenGL on Linux Mint
4. I touchs: OpenGL: Basic Setup
5. Graphics Shaders: Theory and Practice, 2/e (Hardcover)
6. CSCI 4229/5229: Computer Graphics
     > Fall 2012 > Handouts > Introduction to OpenGL


A. 說明:
      1. 目的: 建立一個可供練習 GLSL 的基本專案架構, 包含 OpenGL 的繪圖流程,
                     shader 的處理(編譯, 附加, 連結, 變數存取....)等.

      2. 開發環境:
           作業系統: Linux Mint (基於 Ubuntu 的另一個 Linux 版本)
           整合開發環境(IDE): Eclipse
           程式語言: C, GLSL

      3. 其它:
           a. 本篇文章是延續上一篇 Setting up Eclipse for OpenGL on Linux Mint 而來,
               一開始, 我先將 Getting Started with the OpenGL Shading Language 的
               source code 下載下來, 因為是 C++ 專案的原因, 修改了變數轉型的問題
               (參考: OpenGL: Starting with the Shading Language-0), 接著編譯就出現了
               錯誤訊息: 無法解析有關處理 shader 的函式.

           b. 接著, 在終端機下執行:
               $ glxinfo | grep -i opengl
               備註: "shading language version string: 4.30 NVIDIA via Cg compiler" 
                          看來不是使用原生的 GLSL compiler, 不過我們是用程式去
                          compiler shader, 所以應該不會是問題所在.

           c. 最後, 改成建立 C 專案(而非C++), 並作一些調整, 就可以正常編譯並執行了.

----------------------------------------------------------------------------

B. 新增 Eclipse 專案
      1. 啓動 Eclipse: 
          Select a workspace > /home/lanli/workspace (預設) > OK

      2. 新增 C 專案:
           step 1:
           File -> New -> C Project (或: Shift+ Alt + N > C Project)

           step 2:
           Project name: GLSL_base
           Project type > Executable: Empty Project
           Toolchains: Cross GCC (或 Linux GCC 亦可)
           > Finish

      3. 專案 Libraries 設定:
           1. 滑鼠右鍵點選
               > Project Explorer 下的專案名稱(此處為: GLSL_base)
               > Properties
       
           2. C/C++ Build > Settings
               Cross GCC Linker > Libraries
               利用 "+" 新增以下的 Libraries: glut, GL, GLU
               > OK

----------------------------------------------------------------------------

C. 加入用來處理 shader 的檔案
     1. 下載 glsl_lighting-1.tar.gz 解壓縮後, 將 opengl.h 與 shader.c 複製到
         專案目錄下(在此為: /home/lanli/workspace/GLSL_base)

     2. 在 Eclipse 中, 點選此專案, 按下 "F5" 鍵來 Refresh, 使剛加入的檔案
         出現在專案目錄裡.

     3. 開啟 opengl.h 檔案, 修改如下:
#ifndef __OPENGL_H__
#define __OPENGL_H__


#define LINUX
//#define APPLE

#ifdef LINUX
    #define GL_GLEXT_PROTOTYPES
    #include <GL/glut.h>
#else


    #ifdef APPLE
        #include <OpenGL/gl.h>
        #include <OpenGL/glext.h>
        #include <GLUT/glut.h>
    #else
        #include <GL/gl.h>
        #include <GL/glext.h>
        #include <GL/glut.h>
    #endif /* APPLE */


#endif /* LINUX */

#endif /* __OPENGL_H__ */


說明: 主要修改 Linux 的部分:
           a. 要先定義: GL_GLEXT_PROTOTYPES
           b. 只需引入: <GL/glut.h>

----------------------------------------------------------------------------

D. 新增公用函式

     1. File -> New -> Source File
         Source file: utility.c
         Template: <Default C source template> 或 <None>
          > Finish

     2. 開啟 utility.c 檔案, 修改如下:
/*
 * utility.c
 *
 *  Created on: 2012/9/13
 *      Author: lanli
 */

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include "opengl.h"


// 用來檢查 OpenGL 可能發生的錯誤問題

void checkGLErrors(const char* caller);


/*********************************************/

void checkGLErrors(const char* caller)
{
    unsigned int gle = glGetError();
    if(gle != GL_NO_ERROR)
    {
        fprintf(stderr, "GL Error discovered from caller %s: ", caller);

        switch (gle)
        {
            case GL_INVALID_ENUM:
                fprintf(stderr, "Invalid enum.\n");
                break;

            case GL_INVALID_VALUE:
                fprintf(stderr, "Invalid value.\n");
                break;

            case GL_INVALID_OPERATION:
                fprintf(stderr, "Invalid Operation.\n");
                break;

            case GL_STACK_OVERFLOW:
                fprintf(stderr, "Stack overflow.\n");
                break;

            case GL_STACK_UNDERFLOW:
                fprintf(stderr, "Stack underflow.\n");
                break;

            case GL_OUT_OF_MEMORY:
                fprintf(stderr, "Out of memory.\n");
                break;

            case GL_INVALID_FRAMEBUFFER_OPERATION:
                fprintf(stderr, "Framebuffer object is not complete.\n");
                break;
        }
        return;
    }
    else
    {
        fprintf(stderr, "NO Error from caller: %s \n",  caller);
    }
    return;
}


----------------------------------------------------------------------------

E. 新增 "場景繪製" 相關函式
     1. File -> New -> Source File
         Source file: scene.c
         Template: <Default C source template> 或 <None>
          > Finish

     2. 開啟 scene.c 檔案, 修改如下:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include "opengl.h"


/* shader functions defined in shader.c */
extern void shaderAttachFromFile(GLuint, GLenum, const char *);

void sceneInit();
void sceneRender();
void sceneCycle();


/***********************************************************/


void sceneInit()
{

    //GLint result;

    /* create program object and attach shaders */

    /* link the program and make sure that there were no errors */

    /* get uniform locations */

    /* set up lights */

    /* create 2D/3D object */

    /* call the glutIdleFunc */

    /* setup camera */

    //glLoadIdentity();

}

void sceneRender()
{

    //glClear(GL_COLOR_BUFFER_BIT);

    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    /* enable program and set uniform variables */

    /* render the 2D/3D object */

    glColor3f(0.2, 0.4, 0.6);
    glutWireTeapot(3);


    /* disable program */

    /* render each light */


    glutSwapBuffers();

    //glFlush();
}

void sceneCycle()
{

    // refresh the screen
    glutPostRedisplay();
}


----------------------------------------------------------------------------

F. 新增 main 主函式
     1. File -> New -> Source File
          Source file: main.c
          Template: <Default C source template> 或 <None>
           > Finish

     2. 開啟 main.c 檔案, 修改如下:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include "opengl.h"

static const int WINDOW_X = 0;
static const int WINDOW_Y = 0;
static const int WINDOW_WIDTH = 320;
static const int WINDOW_HEIGHT = 320;

/* checkGLErrors functions defined in utility.c */
extern void checkGLErrors(const char* caller);

/* scene functions defined in scene.c */
extern void sceneInit(void);
extern void sceneRender(void);
extern void sceneCycle(void);

static int g_window;

void glInit();
void keyboard(unsigned char key, int x, int y);

int main(int argc, char* argv[])
{
    /* initialize GLUT */
    glutInit(&argc, argv);
    //glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);
    glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH);

    glutInitWindowPosition(WINDOW_X,  WINDOW_Y);
    glutInitWindowSize(WINDOW_WIDTH,  WINDOW_HEIGHT);

    g_window = glutCreateWindow("OpenGL Shading Language");

    /* initialize GL */
    glInit();

    /* initialize scene */
    sceneInit();

    /* setup callbacks */
    glutDisplayFunc(sceneRender);
    glutIdleFunc(sceneCycle);
    glutKeyboardFunc(keyboard);
    //glutReshapeFunc(resize);
    //glutSpecialFunc(special);
    //glutMouseFunc(mouse);


    /* check GL Errors */
    checkGLErrors("main");

    /* start GLUT main loop */
    glutMainLoop();

    return 0;
}

void glInit()
{
    /* setup initial GL settings */
    glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
    glClearDepth(1.0f);
    glDisable(GL_BLEND);
    glEnable(GL_DEPTH_TEST);
    glDepthFunc(GL_LEQUAL);
    glEnable(GL_CULL_FACE);
    glFrontFace(GL_CCW);
    glCullFace(GL_BACK);

    /* set projection matrix */
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();

    glOrtho(-5, 5, -5, 5, 5, 15);
    // or setPerspective

    glMatrixMode(GL_MODELVIEW);
    gluLookAt(0, 0, 10, 0, 0, 0, 0, 1, 0);
}

// User Input Callbacks
void keyboard(unsigned char key, int x, int y)
{
    switch(key)
    {
        case 27: /* escape */
            glutDestroyWindow(g_window);
            exit(0);
            break;

        case 'q': case 'Q':
             glutDestroyWindow(g_window);
            exit(EXIT_SUCCESS);
            break;

        case 'r': case 'R':
            fprintf(stderr, "call glutPostRedisplay() \n");
            // refresh the screen
            glutPostRedisplay();
            break;
    }
}


----------------------------------------------------------------------------

G. 編譯並執行
    功能選單:
    Project > Build Project
    Run > Run

2012年9月18日 星期二

Installing OpenGL for Visual Studio on Windows

since: 2012/09/18
update: 2012/09/18

reference:
1. Guide to Installing OpenGL and Running the Code

A. 說明:
     有時候還是需要在 Windows 平台上開發程式, 所以記錄一下基本 OpenGL
     開發環境的設置.

-----------------------------------------------------------------------------------------
 
B. 開發環境:
     作業系統: Windows 7 ~ 64bit (在 MacBookPro 上安裝 BootCamp)
     整合開發環境(IDE): Visual Studio 2010

-----------------------------------------------------------------------------------------

C. 安裝 GLUT
     1.下載 glut: Nate Robins - OpenGL - GLUT for Win32
         檔名: glut-3.7.6-bin.zip, 並解壓縮.

     2. 複製檔案:
         a. 將 glut.h 複製到以下目錄內: (須先建好 GL 目錄)
             C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\GL

         b. 將 glut32.lib 複製到以下目錄內:
             C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\lib

         c. 將 glut32.dll 複製到以下目錄內:
             C:\Windows\System (不是 C:\Windows\System32)

-----------------------------------------------------------------------------------------

D. 安裝 GLEW
     1.下載 glext.h : http://www.opengl.org/registry/api/glext.h
         複製到以下目錄內:
         C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\GL

     2. 下載 glew: http://glew.sourceforge.net/
         檔名: glew-1.9.0-win32.zip, 並解壓縮.
         a. 將 glew32.dll 從解壓後的 bin 目錄複製到以下目錄內:
             C:\Windows\System32

         b. 將 glew32.lib 與 glew32s.lib 從解壓後的 lib 目錄複製到以下目錄內:
             C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\lib

         c. 將 glew.h , glxew.h 與 wglew.h 從解壓後的 include 目錄複製到以下目錄內:
             C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\GL

---------------------------------------------------------------------- -------------------

E. 建立專案
     1.Visual Studio 2010 > 檔案 > 新增 > 專案

     2. Visual C++ > Win32 > Win32 主控台應用程式
         名稱: HelloGL
         位置: C:\Lanli\projects
         為方案建立目錄: 取消勾選
          > 確定

     3. 切換到 "應用程式設定" 頁籤
          > 空專案: 勾選
          > 完成

-----------------------------------------------------------------------------------------

F. 撰寫程式碼
    1. 點選 "HelloGL 專案" > 檔案 > 新增 > 檔案

    2. Visual C++ > C++ 檔(.cpp) > 開啟

    3. 檔案 > 將 Source1.cpp 移入 > HelloGL

    4. 檔案名稱: main.cpp
         > 存檔

    5. 將 main.cpp 加入以下的程式碼:
#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("Hello OpenGL!");

    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(0.2, 0.8, 0.5);
    glutWireTeapot(3);

    glFlush();
}


-----------------------------------------------------------------------------------------

G. 編譯執行

2012年9月9日 星期日

Setting up Eclipse for OpenGL on Linux Mint

since: 2012/09/09
update: 2012/09/09

reference:
1. Setup Eclipse C++ and OpenGL support on Ubuntu Linux
2. I touchs: Running OpenGL on Linux Mint - 1
3. I touchs: Running OpenGL on Linux Mint - 2
4. I touchs: Running OpenGL on Linux Mint - 3

A. 說明:

     今後的 OpenGL 學習內容, 主要分成二個方向:
      a. 基本 OpenGL 觀念加強.
      b. OpenGL Shading Language(GLSL).
          備註: 希望以後能學習有關網格(mesh)的處理.

--------------------------------------------------------------------------------

B. 安裝 OpenGL 開發環境
      1. 當安裝好 Linux Mint 並更新顯卡驅動程式後, 在安裝任何軟體前,
          還是先更新一下目前系統的軟體套件.
          $ sudo apt-get update
          $ sudo apt-get upgrade

      2. 安裝基本編譯環境
           $ sudo apt-get install build-essential

      3. 安裝 OpenGL Library(Glut, FreeGlut and Mesa)
           $ sudo apt-get install libglu1-mesa-dev freeglut3-dev mesa-common-dev

      4. 安裝 Eclipse
           $ sudo apt-get install eclipse eclipse-cdt eclipse-cdt-jni

--------------------------------------------------------------------------------

C. 新增 Eclipse 專案

      1. 啓動 Eclipse >
          Select a workspace > /home/lanli/workspace (預設) > OK

      2. 新增 C++ 專案:
           step 1:
           File -> New -> Project (或: Shift+ Alt + N > Project)

           step 2:
           C/C++ > C++ Project > Next

           step 3:
           Project name: HelloOpenGL
           Project type > Executable: Empty Project
           Toolchains: Cross GCC
           > Finish

           step 4:
           Open Associated Perspective? Yes

           step 5:
           完成

--------------------------------------------------------------------------------

D. 專案 Libraries 設定
      1. 滑鼠右鍵點選
          > Project Explorer 下的專案名稱(此處為: HelloOpenGL)
          > Properties
       
      2. C/C++ Build > Settings
          Cross G++ Linker > Libraries
          利用 "+" 新增以下的 Libraries: glut, GL, GLU
          > OK

--------------------------------------------------------------------------------

E. 撰寫 OpenGL 程式碼
     1. 點選 Project > 右鍵 > New > File

     2. File name: main.cpp
         > Fnish

     3. 將 main.cpp 加入以下的程式碼:
#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(0.0, 0.0, 1.0);
    glutWireTeapot(3);
 
    glFlush();
}

--------------------------------------------------------------------------------

F. 編譯並執行
    功能選單:
    Project > Build Project
    Run > Run