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