LearnOpenGL 繪製迴圈變色的三角形

2021-10-05 06:32:59 字數 2641 閱讀 3846

#include #include #include void processinput(glfwwindow* window);

void framebuffer_size_callback(glfwwindow* window, int width, int height);

int main()

glfwmakecontextcurrent(window);

//uniform定義的變數可以由程式傳遞,這樣就可以繪製變色的三角形

const char* vertexshadersource = "#version 330 core\n\

layout(location = 0) in vec3 pos;\n \

void main()\n\n;";

const char* fragmentshadersource = "#version 330 core\n\

out vec4 fragcolor;\n\

uniform vec4 ourcolor;\

void main()\n\n";

glfwsetframebuffersizecallback(window, framebuffer_size_callback);

if (!gladloadglloader((gladloadproc)glfwgetprocaddress))

int vertexshader = glcreateshader(gl_vertex_shader); //建立vs

glshadersource(vertexshader, 1, &vertexshadersource, null); //shader原始碼附加到shader身上

glcompileshader(vertexshader); //編譯

int success;

glgetshaderiv(vertexshader, gl_compile_status, &success); //獲得編譯結果

if (!success)

int fragmentshader = glcreateshader(gl_fragment_shader); //建立fs

glshadersource(fragmentshader, 1, &fragmentshadersource, null);

glcompileshader(fragmentshader);

glgetshaderiv(fragmentshader, gl_compile_status, &success);

if (!success)

int shaderprogram = glcreateprogram(); //建立程式物件

glattachshader(shaderprogram, vertexshader); //shader附加到程式物件

glattachshader(shaderprogram, fragmentshader); //shader附加到程式物件

gllinkprogram(shaderprogram); //鏈結他們

glgetprogramiv(shaderprogram, gl_link_status, &success); //獲得鏈結結果

if (!success)

gldeleteshader(vertexshader); //附加完畢,已經沒用了

gldeleteshader(fragmentshader);

float vertices = ;

unsigned int vbo, vao;

glgenbuffers(1, &vbo);

glbindbuffer(gl_array_buffer, vbo);

glgenvertexarrays(1, &vao);

glbindvertexarray(vao);

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

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

glenablevertexattribarray(0);

glbindbuffer(gl_array_buffer, 0);

glbindvertexarray(0);

while (!glfwwindowshouldclose(window))

gldeletevertexarrays(1, &vao);

gldeletebuffers(1, &vbo);

glfwterminate();

return 0;

}void processinput(glfwwindow* window)

}void framebuffer_size_callback(glfwwindow* window, int width, int height)

效果圖:

sin(),迴圈變色的三角形。

Learn OpenGL基礎書籍推薦

關於opengl的學習資料 c語言我覺得是最值得任何程式設計師花大量的時間學習的語言.原因是 c語言不在可能隨著時間的變化而產生太大的變動,最多也就是一點修修補補.可以說是一朝學會,終生受用 c語言是簡約的,就32個關鍵字,但是基本上現在任何語言都直接或者間接的構建在c語言之上.linux,wind...

Learn OpenGL基礎書籍推薦

關於opengl的學習資料 c語言我覺得是最值得任何程式設計師花大量的時間學習的語言.原因是 c語言不在可能隨著時間的變化而產生太大的變動,最多也就是一點修修補補.可以說是一朝學會,終生受用 c語言是簡約的,就32個關鍵字,但是基本上現在任何語言都直接或者間接的構建在c語言之上.linux,wind...

LearnOpenGL筆記6光照

last 鏡面光照 現實生活中看到某一物體的顏色並不是這個物體真正擁有的顏色,而是它所反射的 reflected 顏色。換句話說,那些不能被物體所吸收 absorb 的顏色 被拒絕的顏色 就是我們能夠感知到的物體的顏色。當我們把光源的顏色與物體的顏色值相乘,所得到的就是這個物體所反射的顏色 也就是我...