2

レッドブックの球体照明の例で、私はこれを読みました:

GLfloat light_ambient[] = { 0.0, 0.0, 0.0, 1.0 };
GLfloat light_diffuse[] = { 1.0, 1.0, 1.0, 1.0 };
GLfloat light_specular[] = { 1.0, 1.0, 1.0, 1.0 };
GLfloat light_position[] = { 1.0, 1.0, 1.0, 0.0 };

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);

それからそれは言う:

この例では、glLightfv()の最初の3回の呼び出しは、GL_AMBIENT、GL_DIFFUSE、およびGL_SPECULARパラメーターのデフォルト値を指定するために使用されているため不要です。

これまでのところ理解しているように、すべての光源には、周囲、拡散、鏡面反射パラメータのデフォルト値があり、これら3つの配列は、これらのデフォルト値を指定します すべての光源はデフォルトで拡散反射、鏡面反射、周囲光ですか?

4

2 に答える 2

4

OpenGLライティングモデルでは、オブジェクトに対して4つの個別のライティング方程式が計算されます。Ambient、Diffuse、Specular、およびEmissionです。アンビエントは法線を考慮しませんが、拡散反射光と鏡面反射光は考慮しません。また、エミッションは光をまったく考慮しません。

これらのさまざまな照明値をすべて合計して、オブジェクトの最終的な色を算出します。

于 2010-12-01T16:43:57.623 に答える
2

はい、これらはLight0のデフォルト値です:http ://www.opengl.org/sdk/docs/man/xhtml/glLight.xml

于 2010-12-01T16:34:19.317 に答える