**放在github上
這一節比上一節《開啟乙個視窗》,多了需要使用glew庫和3d數學庫
glew是opengl的擴充套件庫,用於幫助c/c++開發者初始化擴充套件(opengl擴充套件功能)並書寫可移植的應用程式。這個可以通過上網搜教程自行安裝引用。
3d函式庫可以用網上的,也可以用源教程裡的。這裡我是根據需要開始自己寫了乙個3d數學的標頭檔案,很好理解,也更利於學習計算機圖形學,根據每章教程需要用的不同數學表達,逐漸增加我的3d數學檔案。
opengl_math.h:
#ifndef __opengl_math_h
#define __opengl_math_h
//向量
typedef float vector3f[3];
//向量賦值
inline void loadvector3(vector3f v, const
float x, const
float y, const
float z)
#endif
main.cpp:
#include
#include // glew擴充套件庫,這個引用要放在freeglut.h前
#include // freeglut圖形庫
#include "opengl_math.h"
gluint vbo;
static
void renderscencecb()
static
void createvertexbuffer()
int main(int argc, char ** argv)
// 快取清空後的顏色值
glclearcolor(0.0f, 0.0f, 0.0f, 0.0f);
// 建立頂點緩衝器
createvertexbuffer();
// 開始glut的內部迴圈
glutmainloop();
return
0;}
typedef
float vector3f[3];
首先是3d數學庫,本次只用到了三維向量,我們使用乙個長度為3的浮點數陣列來表示乙個三維向量
inline
void loadvector3(vector3f v, const
float x, const
float y, const
float z)
通過乙個內聯函式,可以給三維向量(長度為三的浮點數陣列)賦值
vector3f vertices[1];
loadvector3(vertices[0], 0.0f, 0.0f, 0.0f);
createvertexbuffer()建立頂點緩衝器函式裡,建立了乙個只有乙個頂點的頂點陣列,再給那個頂點賦值為(0.0f,0.0f,0.0f)即在空間的位置是原點(這裡會繪製在螢幕中心)
glgenbuffers(1, &vbo);
glbindbuffer(gl_array_buffer, vbo);
glbufferdata(gl_array_buffer, sizeof(vertices), vertices, gl_static_draw);
在建立頂點緩衝器(以後的教程還會建立索引緩衝期)的時候,這三個函式一般都連續出現。
void glgenbuffers(glsizei n ,gluint *buffers)
void glbindbuffer(glenum target,gluint buffer)
glbufferdata(gl_array_buffer, sizeof(vertices), vertices, gl_static_draw);
建立了緩衝器,繫結了啟用了它,現在就是把頂點的位置資訊繫結在它上面,第乙個引數是快取物件型別,第二個引數是資料的長度,第三個引數是資料的位址,最後乙個引數說明是靜態資料,頂點資料一經初始化便不會改變
glenum res = glewinit();
if (res != glew_ok)
在glut初始化後,檢查glew是否就緒,如果glew初始化沒什麼問題,程式可以繼續執行,否則退出
glbindbuffer(gl_array_buffer, vbo);
glvertexattribpointer(0, 3, gl_float, gl_false, 0, 0);
gldrawarrays(gl_points, 0, 1);
先是繫結緩衝物件到gl_array_buffer緩衝器上,之後對其操作
OpenGL學習筆記 2 畫乙個正方形
void baseinit glfwmakecontextcurrent glwindow if gladloadglloader gladloadproc glfwgetprocaddress 畫乙個普通的正方形 void normalsquare 索引 unsigned int indices ...
OpenGL學習筆記 2 畫乙個正方形
void baseinit glfwmakecontextcurrent glwindow if gladloadglloader gladloadproc glfwgetprocaddress 畫乙個普通的正方形 void normalsquare 索引 unsigned int indices ...
OpenGL學習之路3 畫乙個三角形
放在github上 我們在螢幕上繪製圖形的時候,是在乙個歸一化的空間裡,即為下圖 可以看到繪製視窗左下角座標為 1.0,1.0 到右上角座標為 1.0,1.0 opengl math.h ifndef opengl math h define opengl math h 向量 typedef flo...