OpenGL學習筆記 2 畫乙個正方形

2022-02-02 21:57:56 字數 2864 閱讀 4139

void baseinit()

glfwmakecontextcurrent(glwindow);

if (!gladloadglloader((gladloadproc)glfwgetprocaddress))

畫乙個普通的正方形

void normalsquare()

; //索引

unsigned int indices = ;

//編譯著色器

shader ourshader("vertex_1.vs", "fragment_1.fs");

ourshader.use();//gluseprogram(shaderprogram);

unsigned int vao;

//頂點陣列

glgenvertexarrays(1, &vao);

glbindvertexarray(vao);

//繫結頂點陣列快取

unsigned int vbo;

glgenbuffers(1, &vbo);

glbindbuffer(gl_array_buffer, vbo);

glbufferdata(gl_array_buffer, sizeof(vertices), vertices, gl_static_draw);

//繫結索引快取

unsigned int ebo;

glgenbuffers(1, &ebo);

glbindbuffer(gl_element_array_buffer, ebo);

glbufferdata(gl_element_array_buffer, sizeof(indices), indices, gl_static_draw);

// 位置屬性

glvertexattribpointer(0, 3, gl_float, gl_false, 3 * sizeof(float), (void*)0);

glenablevertexattribarray(0);

while (!glfwwindowshouldclose(glwindow))

gldeletevertexarrays(1, &vao);

gldeletebuffers(1, &vbo);

gldeletebuffers(1, &ebo);

glfwterminate();

}

最終效果

和上乙個筆記裡畫彩色三角形的邏輯一樣,在頂點屬性後面加上顏色屬性,設定資料訪問指標的屬性,記得頂點著色器要加上顏色的輸入(步長和相位)

//彩色正方形

void colourfulsquare()

; //索引

unsigned int indices = ;

//編譯著色器

shader ourshader("vertex_4.vs", "fragment_4.fs");

ourshader.use();//gluseprogram(shaderprogram);

unsigned int vao;

//頂點陣列

glgenvertexarrays(1, &vao);

glbindvertexarray(vao);

//繫結頂點陣列快取

unsigned int vbo;

glgenbuffers(1, &vbo);

glbindbuffer(gl_array_buffer, vbo);

glbufferdata(gl_array_buffer, sizeof(vertices), vertices, gl_static_draw);

//繫結索引快取

unsigned int ebo;

glgenbuffers(1, &ebo);

glbindbuffer(gl_element_array_buffer, ebo);

glbufferdata(gl_element_array_buffer, sizeof(indices), indices, gl_static_draw);

// 位置屬性

glvertexattribpointer(0, 3, gl_float, gl_false, 6 * sizeof(float), (void*)0);

glenablevertexattribarray(0);

// 顏色屬性

glvertexattribpointer(1, 3, gl_float, gl_false, 6 * sizeof(float), (void*)(3 * sizeof(float))); //最後乙個引數是資料的起點

glenablevertexattribarray(1);

while (!glfwwindowshouldclose(glwindow))

gldeletevertexarrays(1, &vao);

gldeletebuffers(1, &vbo);

gldeletebuffers(1, &ebo);

glfwterminate();

}

最終效果

可以試試線框模式,在while之前加上

glpolygonmode(gl_front_and_back, gl_line);

效果圖

OpenGL學習之路2 畫乙個點

放在github上 這一節比上一節 開啟乙個視窗 多了需要使用glew庫和3d數學庫 glew是opengl的擴充套件庫,用於幫助c c 開發者初始化擴充套件 opengl擴充套件功能 並書寫可移植的應用程式。這個可以通過上網搜教程自行安裝引用。3d函式庫可以用網上的,也可以用源教程裡的。這裡我是根...

OpenGL學習筆記 2 畫乙個正方形

void baseinit glfwmakecontextcurrent glwindow if gladloadglloader gladloadproc glfwgetprocaddress 畫乙個普通的正方形 void normalsquare 索引 unsigned int indices ...

OPENGL學習筆記(一)畫乙隻dinosaur

opengl這個庫好,比起之前用過的opencv,cuda等開放庫,opengl才幾兆,不用安裝,而且相對於vtk來說,opengl封裝好的函式較為底層,靈活度較高,也可以更好地體現自己編寫的演算法的好壞。opengl寫程式先要opengl的標頭檔案,lib,dll相關配置可以在網上找到,這裡不再累...