這是學習LearnOpenGL CN教程的筆記,包括我遇到的問題和我的爛筆頭,文章名與網站小節對應,
------------------------------------分割線--------------------------------------------------------------------------------------------
擺張重要的圖先,藍色的是可以撰寫著色器控制的部分,

著色器在C++字串中的形式

"#version 330 core\n""layout (location = 0) in vec3 aPos;\n""void main()\n""{\n""gl_Position=vec4(aPos.x,aPos.y,aPos.z,1.0);\n""}\n";繪制流程
//初始化緩沖陣列物件unsigned int VAO; //頂點陣列物件VAOunsigned int VBO; //頂點緩沖物件VBO //創建VAO glGenVertexArrays(1, &VAO); //系結VAO glBindVertexArray(VAO); //創建VBO glGenBuffers(1, &VBO); //生成vbo和緩沖ID //緩沖系結 glBindBuffer(GL_ARRAY_BUFFER, VBO); //將資料傳輸到當前系結緩沖 glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW); //第四個引數:如何管理給定的資料 // GL_STATIC_DRAW :資料不會或幾乎不會改變, // GL_DYNAMIC_DRAW:資料會被改變很多, // GL_STREAM_DRAW :資料每次繪制時都會改變, //決議頂點資料,設定頂點屬性指標 glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 3 * sizeof(float), (void*)0); glEnableVertexAttribArray(0);//創建著色器程式//頂點著色器 unsigned int vertexShader; vertexShader = glCreateShader(GL_VERTEX_SHADER); //附加 glShaderSource(vertexShader, 1, &vertexShaderSource, NULL); //編譯 glCompileShader(vertexShader); //檢測失敗 int success; char infoLog[512]; glGetShaderiv(vertexShader, GL_COMPILE_STATUS, &success); if (!success) { glGetShaderInfoLog(vertexShader, 512, NULL, infoLog); std::cout << "ERROR::SHADER::VERTEX::COMPILATION_FAILED\n" << infoLog << std::endl; } //片段著色器 unsigned int fragmentShader; fragmentShader = glCreateShader(GL_FRAGMENT_SHADER); glShaderSource(fragmentShader, 1, &fragmentShaderSource, NULL); glCompileShader(fragmentShader); //片段著色器 unsigned int fragmentShaderY; fragmentShaderY = glCreateShader(GL_FRAGMENT_SHADER); glShaderSource(fragmentShaderY, 1, &fragmentShaderYellowSource, NULL); glCompileShader(fragmentShaderY); shaderProgram = glCreateProgram(); //附加 glAttachShader(shaderProgram, vertexShader); glAttachShader(shaderProgram, fragmentShader); //鏈接 glLinkProgram(shaderProgram); shaderYellowProram = glCreateProgram(); //附加 glAttachShader(shaderYellowProram, vertexShader); glAttachShader(shaderYellowProram, fragmentShaderY); //鏈接 glLinkProgram(shaderYellowProram); //鏈接成功后,釋放著色器物件 glDeleteShader(vertexShader); glDeleteShader(fragmentShader); glDeleteShader(fragmentShaderY);//在回圈渲染中繪制 //渲染回圈 while (!glfwWindowShouldClose(window)) { //渲染指令 glClearColor(0.2f, 0.3f, 0.3f, 1.0f); glClear(GL_COLOR_BUFFER_BIT); glUseProgram(shaderProgram); glBindVertexArray(VAO); glDrawArrays(GL_TRIANGLES, 0, 3); //交換顏色緩沖,繪制顯示 glfwSwapBuffers(window); }
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/2097.html
標籤:其他
