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. 編譯並執行:
沒有留言:
張貼留言
注意:只有此網誌的成員可以留言。