これは学習ですLearnOpenGL CNの私の問題と書かれた私の悪いを含むチュートリアルノート、。記事名は、サイトのセクションに対応します。
------------------------------------分割ライン------------ -------------------------------------------------- ------------------------------
張は重要な最初のチャートを入れて、青色の部分は、あなたがシェーダー制御を書くことができます。
C ++シェーダ文字列の形で
"#version 330コアの\ n" vec3 APOSにおける"レイアウト(位置= 0); \ n" "(メインボイド)\ n" "{に\ n" 「gl_Position = vec4(aPos.x、aPos.y、APOS。 Z、1.0); \ n」 "} \ n"。
描画処理
//バッファの配列オブジェクト初期化する 符号なし整数 VAOと、 // 頂点配列オブジェクトVAO 符号なし整数 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 )頂点(頂点、GL_STATIC_DRAW ); //第四パラメータ:与えられたデータを管理する方法 // ほとんど、あるいはまったく変更せずにデータ:GL_STATIC_DRAWを。 // GL_DYNAMIC_DRAW:データが大量に変更されます。 // GL_STREAM_DRAW:データがプロットされるたびに変更されます。 // パース頂点データ、頂点集合ポインタ属性 glVertexAttribPointer(0を、3。、GL_FLOAT ,, GL_FALSE ,, 3。 * はsizeof(フロート)、(無効 *)0 ); glEnableVertexAttribArray(0 ); //シェーダプログラムを作成します // 頂点シェーダ 符号なし整数vertexshader; vertexshader = glCreateShader(GL_VERTEX_SHADER); //附加 glShaderSource(vertexShader、1、&vertexShaderSource、NULL); // 编译 glCompileShader(vertexShader)。 // 检测失败 のint 成功。 チャー INFOLOG [ 512 ]。 glGetShaderiv(vertexShader、GL_COMPILE_STATUS、 &成功)。 もし(!成功) { glGetShaderInfoLog(vertexShader、512 、NULL、INFOLOG)。 std :: coutの << " ERROR :: SHADER :: VERTEX :: COMPILATION_FAILED \ nは" << INFOLOG << はstd ::てendl; } //フラグメントシェーダ の符号なし整数fragmentShader; fragmentShader = glCreateShader(GL_FRAGMENT_SHADER); glShaderSource(fragmentShader、1。 、&fragmentShaderSource、NULL); glCompileShader(fragmentShader); // フラグメントシェーダ 符号なし整数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が) //描画サイクルのレンダリング // ループのレンダリング 中に(!glfwWindowShouldClose(ウィンドウ)){ // レンダリング命令 glClearColor(0.2F、0.3F、0.3F、1.0F ) にglClear(GL_COLOR_BUFFER_BIT); glUseProgram(shaderProgram); glBindVertexArray(VAO); glDrawArrays(GL_TRIANGLESに0、3 ); / / 交換カラーバッファ、描画表示 glfwSwapBuffers(ウィンドウ); }