OpenGL學習之路2 畫乙個點

2021-08-19 05:19:49 字數 2687 閱讀 5428

**放在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...