2012年5月26日 星期六

OpenGL: Starting with the Shading Language-4

since: 2012/05/26
update: 2012/05/26


reference:
1. Tutorial - Getting Started with the OpenGL Shading Language (GLSL)
2. OpenGL: Starting with the Shading Language-0
3. OpenGL: Starting with the Shading Language-1
4. OpenGL: Starting with the Shading Language-2
5. OpenGL: Starting with the Shading Language-3

使用 Shaders

A. 開啓 scene.cpp 檔案:
     // 使用 shader 來渲染(rendering)物體
void
sceneRender(void)
{
    int i;
    // clearing the color and depth buffers
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    /* enable program and set uniform variables */
    // 呼叫 glUseProgram, 來使用有附加上 shaders 的 program object
    glUseProgram(g_program);

    //***************************************************************
    // 使用 glUniform3fv 來設定在 shaders 裡 vec3 uniform 變數的值.
    //
    // glUniform3fv(GLint location, GLsizei count, const GLfloat *value);
    //
    // location: uniform 變數的 location
    // count: 該 location 的向量數目
    // value: 包含向量資料的指標(型別: 浮點陣列)
    //
    // g_cameraPosition 和 g_lightColor 的值, 在 sceneInit 函式中設定好了.
    //
    // g_lightPosition 的值, 會在 sceneCycle 函式中持續地改變.
    glUniform3fv(g_programCameraPositionLocation, 1, g_cameraPosition);
    glUniform3fv(g_programLightPositionLocation, NUM_LIGHTS, g_lightPosition);
    glUniform3fv(g_programLightColorLocation, NUM_LIGHTS, g_lightColor);

    /* render the cylinder */
    // 繪製一個帶有頂點位置與法線資料的圓柱體
    glDrawArrays(GL_TRIANGLE_STRIP, 0, g_cylinderNumVertices);

    /* disable program */
    //  將 0 傳給 glUseProgram 函式, 來停用 program object
    glUseProgram(0);

    /* render each light */
    // 繪製一些球體來代表光源
    for(i = 0; i < NUM_LIGHTS; ++i) {
        /* render sphere with the light's color/position */
        glPushMatrix();
        glTranslatef(g_lightPosition[i * 3 + 0], g_lightPosition[i * 3 + 1], g_lightPosition[i * 3 + 2]);

        glColor3fv(g_lightColor + (i * 3));
        glutSolidSphere(0.04, 36, 36);
        glPopMatrix();
    }

    glutSwapBuffers();
}

------------------------------------------------------------------------------------

B. 編譯並執行:


沒有留言:

張貼留言

注意:只有此網誌的成員可以留言。