#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 的顏色 被拒絕的顏色 就是我們能夠感知到的物體的顏色。當我們把光源的顏色與物體的顏色值相乘,所得到的就是這個物體所反射的顏色 也就是我...