2 つの単純なオブジェクト (glutSolidCube と glutSolidTeapot) を持つ openGL 3d シーンがあります。GL_COLOR_MATERIAL を有効にしてライトを設定すると、次の結果が得られます。
どっちがいい。次に、次のように独自のマテリアルを設定すると:
//diffuse light color variables
GLfloat dlr = 0.4;
GLfloat dlg = 0.6;
GLfloat dlb = 0.9;
//ambient light color variables
GLfloat alr = 0.7;
GLfloat alg = 0.7;
GLfloat alb = 0.7;
//ambient light color variables
GLfloat slr = 0.4;
GLfloat slg = 0.4;
GLfloat slb = 0.4;
GLfloat DiffuseLight[] = {dlr, dlg, dlb}; //set DiffuseLight[] to the specified values
GLfloat AmbientLight[] = {alr, alg, alb}; //set AmbientLight[] to the specified values
GLfloat SpecularLight[] = {slr, slg, slb}; //set AmbientLight[] to the specified values
glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, (float *)&AmbientLight);
glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, (float *)&DiffuseLight);
glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, (float *)&SpecularLight);
この非常に異なる結果が得られます。適切にシェーディングされていないことがわかります。SMOOTH (Gouraud) と定義しましたが、フラット シェーディングのようです。
問題はどこにありますか?それは材料定義にありますか?