opengl微開發之1-從零開始
對OpenGL有一點了解之後,現在開始真正編寫代碼。
今天的內容:
使用FreeGLUT創建OpenGL的上下文環境
初始化GLEW
創建一個OpenGL的的模板範例
第一步:
一個OpenGL的上下文可以允許我們傳遞命令到底層硬件,所以需要一個上下文環境。首先需要配置一個功能窗口,創建一個名為chapter1.c的文件,在你的編輯器或者集成開發環境中打開它,插入如下代碼:
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <GL/glew.h>
#include <GL/freeglut.h>
#define WINDOW_TITLE_PREFIX "Chapter 1"
int
CurrentWidth = 800,
CurrentHeight = 600,
WindowHandle = 0;
void Initialize(int, char*[]);
void InitWindow(int, char*[]);
void ResizeFunction(int, int);
void RenderFunction(void);
int main(int argc, char* argv[])
{
Initialize(argc, argv);
glutMainLoop();
exit(EXIT_SUCCESS);
}
void Initialize(int argc, char* argv[])
{
InitWindow(argc, argv);
fprintf(
stdout,
"INFO: OpenGL Version: %s\n",
glGetString(GL_VERSION)
);
glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
}
void InitWindow(int argc, char* argv[])
{
glutInit(&argc, argv);
glutInitContextVersion(4, 0);
glutInitContextFlags(GLUT_FORWARD_COMPATIBLE);
glutInitContextProfile(GLUT_CORE_PROFILE);
glutSetOption(
GLUT_ACTION_ON_WINDOW_CLOSE,
GLUT_ACTION_GLUTMAINLOOP_RETURNS
);
glutInitWindowSize(CurrentWidth, CurrentHeight);
glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA);
WindowHandle = glutCreateWindow(WINDOW_TITLE_PREFIX);
if(WindowHandle < 1) {
fprintf(
stderr,
"ERROR: Could not create a new rendering window.\n"
);
exit(EXIT_FAILURE);
}
glutReshapeFunc(ResizeFunction);
glutDisplayFunc(RenderFunction);
}
void ResizeFunction(int Width, int Height)
{
CurrentWidth = Width;
CurrentHeight = Height;
glViewport(0, 0, CurrentWidth, CurrentHeight);
}
void RenderFunction(void)
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glutSwapBuffers();
glutPostRedisplay();
}
編譯運行之,將會得到如下窗口:

解釋:
WINDOW_TITLE_PREFIX 定義窗口名字
CurrentWidth、CurrentHeight 窗口的尺寸
WindowHandle FreeGLUT創建的窗口處理句柄
初始化:
聲明函數原形並定義main應用程序入口函數,在Initialize函數中調用InitWindow函數。InitWindow調用幾個FreeGLUT函數創建一個窗口,以glutInit函數開始,其作用是初始化FreeGLUT類庫。其參數是main傳入的兩個參數,你也可以不使用任何參數。
上下文類型和窗口選項:
glutInitContextVersion
glutInitContextFlags
glutInitContextFrofile
glutSetOption 其參數GLUT_ACTION_ON_WINDOW_CLOSE是確保glutMainLoop函數在main結束時將其清除。
glutInitWindowSize 初始化窗口的尺寸
顯示模式:
glutInitDisplayMode 定義OpenGL上下文類型,設備應該如何渲染場景,選擇有:
GLUT_DEPATH 啟動Depth buffer,也叫Z-buffer,根據它來決定像素屏幕上的渲染順序
GLUT_DOUBLE 啟動 double-buffer,也就是開啟前後端顯示緩存,主要是減少圖片的閃爍
GLUT_RGBA 定義色彩的混合模式,即RGBA混合模式
創建窗口:
glutCreateWindow 創建我們的上下文環境並返回新創建的窗口處理句柄。其參數WINDOW_TITLE_PREFIX即窗口的名稱
函數回調:
glutReshapeFunction 處理窗口尺寸
glutDisplayFunction 渲染場景
調試輸出:
glGetString 獲取OPengl的版本
fprintf c函數,打印字符
如下:

屏幕刷新顏色:
glClearColor 其參數對應的是FreeGLUT的GLUT_RGBA設置模式,值範圍0~1.0f對應1~100%色彩強度。
下麵是RGBA的混合直觀效果圖:

例子:
-
glClearColor(1.0f, 0.0f, 0.0f, 0.0f);for red -
glClearColor(0.0f, 1.0f, 0.0f, 0.0f);for green -
glClearColor(0.0f, 0.0f, 1.0f, 0.0f);for blue -
glClearColor(1.0f, 0.0f, 1.0f, 0.0f);for purple -
glClearColor(0.0f, 0.0f, 0.5f, 0.0f);for dark blue



最後更新:2017-04-03 08:26:28