LearnOpenGLノート(2)三角形

これは学習です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.2F0.3F0.3F1.0F 
        にglClear(GL_COLOR_BUFFER_BIT); 

        glUseProgram(shaderProgram); 
        glBindVertexArray(VAO); 
        glDrawArrays(GL_TRIANGLESに03 ); 



        / / 交換カラーバッファ、描画表示
        glfwSwapBuffers(ウィンドウ);     
    }

おすすめ

転載: www.cnblogs.com/lxliiin/p/11795272.html