OpenGL 程式設計/中級/材質
在 OpenGL 中,材質可以透過使用照明引數來定義,這些引數會影響表面在照亮時的外觀。照明引數包括環境光、漫射光、鏡面反射光和發射光成分,它們定義了材質對不同型別光線的響應方式。
以下是如何使用 C++ 在 OpenGL 中設定簡單材質的示例
GLfloat mat_ambient[] = { 0.0f, 0.0f, 0.0f, 1.0f };
GLfloat mat_diffuse[] = { 0.8f, 0.8f, 0.8f, 1.0f };
GLfloat mat_specular[] = { 1.0f, 1.0f, 1.0f, 1.0f };
GLfloat mat_emission[] = { 0.0f, 0.0f, 0.0f, 1.0f };
GLfloat mat_shininess = 50.0f;
glMaterialfv(GL_FRONT, GL_AMBIENT, mat_ambient);
glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse);
glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular);
glMaterialfv(GL_FRONT, GL_EMISSION, mat_emission);
glMaterialf(GL_FRONT, GL_SHININESS, mat_shininess);
在 OpenGL 中,材質可以透過使用照明引數來定義,這些引數會影響表面在照亮時的外觀。照明引數包括環境光、漫射光、鏡面反射光和發射光成分,它們定義了材質對不同型別光線的響應方式。
以下是如何使用 C++ 在 OpenGL 中設定簡單材質的示例
在此示例中,mat_ambient、mat_diffuse、mat_specular、mat_emission 和 mat_shininess 都是可以為表面設定的材質屬性。
glMaterialfv 函式用於設定每個材質元件,這些元件指定為一個包含四個浮點數的陣列。前三個元件指定材質的 RGB 值,第四個元件指定 alpha 值。
最後,glMaterialf 函式用於設定材質的光澤度,它會影響鏡面反射光的高光大小和亮度。
設定好材質屬性後,您可以使用照明渲染幾何圖形。您需要在 OpenGL 上下文中設定光源並啟用照明,以及設定光源的位置和方向。
以下是如何設定照明並使用您定義的材質屬性渲染幾何圖形的示例
// Set up lighting
GLfloat light_ambient[] = { 0.2f, 0.2f, 0.2f, 1.0f };
GLfloat light_diffuse[] = { 0.8f, 0.8f, 0.8f, 1.0f };
GLfloat light_specular[] = { 1.0f, 1.0f, 1.0f, 1.0f };
GLfloat light_position[] = { 0.0f, 1.0f, 0.0f, 1.0f };
glLightfv(GL_LIGHT0, GL_AMBIENT, light_ambient);
glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse);
glLightfv(GL_LIGHT0, GL_SPECULAR, light_specular);
glLightfv(GL_LIGHT0, GL_POSITION, light_position);
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
// Render your geometry
glBegin(GL_TRIANGLES);
// Define your geometry vertices
glNormal3f(0.0f, 0.0f, 1.0f); // Set the normal for the face
glVertex3f(0.0f, 0.0f, 0.0f); // Vertex 1
glVertex3f(1.0f, 0.0f, 0.0f); // Vertex
glVertex3f(1.0f, 1.0f, 0.0f); // Vertex 2
glVertex3f(0.0f, 1.0f, 0.0f); // Vertex 3
glEnd();
在此示例中,GL_LIGHT0 用於定義第一個光源,其環境光、漫射光和鏡面反射光元件使用 glLightfv 設定。glEnable 函式用於啟用照明並啟用光源。
要使用您定義的材質屬性渲染幾何圖形,您需要使用 glNormal3f 函式指定幾何圖形每個面的法線,然後使用 glVertex3f 定義幾何圖形的每個頂點。當您渲染幾何圖形時,OpenGL 會使用您定義的照明引數根據光源的位置和方向來對幾何圖形進行著色。
這只是一個使用 C++ 在 OpenGL 中使用材質的基本示例。您可以設定更多材質引數,以及使用更多高階的照明技術來建立逼真的照明效果。