OpenGL 閱讀筆記 (二) OpenGL基本操作

這邊虎喵跳過glfw/glew的初始化,
先來提一下OpenGL的基本操作方式

前面也提到過, OpenGL是一個類C的語言,
因此使用C/C++的攻城獅們應該會感到很熟悉.
OpenGL的基本動作循環如下:


每一行code的解釋如下:

// 本地變數, 用來獲取操作物件的索引值(index)
int object;

// 向OpenGL獲取對應的index, 數量numbers可以自己指定, 需要跟你傳進來的object指針匹配 
// 由於此時帶進來的object只有一個int, 因此這邊number會填1
glGenXXXObject(OBJECT_NUMBERS, &object);

// 綁定該index到操作物件上, 操作物件的類型都是OpenGL定義好的, 需要依照使用來選擇
glBindBXXXObject(SOME_OPENGL_DEFINED_TARGET, object);

// 將資料傳送對應的操作物件上面
glBufferData(SOME_OPENGL_DEFINED_TARGET, sizeof(YOUR_DATA), YOUR_DATA, object);

// 解綁操作物件
glBindBXXXObject(SOME_OPENGL_DEFINED_TARGET, 0);

// 釋放操作物件
glDeleteXXXOject(OBJECT_NUMBERS, &object);

從上述的流程我們也可以看出:
真正負責管理物件的人是OpenGL
我們從CPU端可以做的事情是向OpenGL索取操作物件的index,
在CPU操作的時候都需要透過這個index來進行.

有了這個基本概念以後,
我們接著開始介紹繪製圖形必要的兩個著色器 (Shader)
只要使用這兩個著色器就可以畫出圖形了~

OpenGL 閱讀筆記 (一) 基礎工作環境

最近虎喵要開始學習OpenGL啦~
做為自己的閱讀筆記與心得, 希望也能幫助到各位

1. OpenGL是幹啥用的?

OpenGL = Open Graphics Library
顧名思義, 是開放圖形函式庫
主要的功能是用來繪製2D/3D向量圖形
OpenGL是一個規範, 定義了對應的API要有的行為, 與平台/開發語言沒有相關性.

儘管OpenGL的實作可以完全依靠軟體實現, 但它其實是為了硬體加速而設計的,
跟平台相關的細節將由不同的作業系統進行實現,
而OpenGL的硬體加速支援則是由顯卡廠商負責實現.

OpenGL的定義方式類似於C語言, 但他是語言獨立的,
因此你可以看到不同的開發語言上都對於OpenGL的使用進行了封裝.
(例如你可以在開發Android Apps使用Java的GLES20類別來呼叫OpenGL)

2. GLEW 與 GLFW

聽從丁小喵的建議, 我的開發環境是使用Ubuntu 14.04, 搭配的IDE是Eclipse
如果要直接使用OpenGL的函式庫的話, 必須要先抽取出相關函式,
像是這樣:

const char *name = "glGenBuffers";
void *p = (void *)wglGetProcAddress(name);
if (p == 0 ||
   (p == (void*)0x1) || (p == (void*)0x2) ||
   (p == (void*)0x3) || (p == (void*)-1)) {
 HMODULE module = LoadLibraryA("opengl32.dll");
 p = (void *)GetProcAddress(module, name);
}

如果每個Function都要這樣幹一次就太疲勞了,
GLEW (OpenGL Extension Wrangler Library) 已經幫你幹好這件事情啦
只要編譯的時候連結到glew的函式庫, 加上對應的header就可以無痛使用

再來是剛剛提到的平台無關的特性, 這點就交給GLFW完成囉!
可以到GLFW的官網下載對應OS的函式庫, 當然他也有提供Source code可以自行編譯.
設置好這兩個函式庫之後就可以開發啦, 這時候你的.cpp內會有

// GLEW (Warp the GL library, you don't need to retrieve function by yourself)
#define GLEW_STATIC
#include <GL/glew.h>
// GLFW (Setup the window which support OpenGL operation on different platform)
#include <GLFW/glfw3.h>

這樣就完成最基礎的開發環境設置囉!

OpenGL 閱讀筆記 (二) OpenGL基本操作

這邊虎喵跳過glfw/glew的初始化, 先來提一下OpenGL的基本操作方式 前面也提到過, OpenGL是一個類C的語言, 因此使用C/C++的攻城獅們應該會感到很熟悉. OpenGL的基本動作循環如下: 每一行code的解釋如下: // 本地變數,...