glutSolidCubeとglutSolidTeapotを画面に描画します。OpenGLのFace Cullingが正しく機能しない
glEnable(GL_CULL_FACE)をアクティブにするたびに、オブジェクトごとに異なる結果が得られます。キューブを適切に表示する(glCullFace(GL_BACK))か、またはティーポット(glCullFace(GL_FRONT))を取得することはできますが、それらの両方を行うことはできません。
カリングを無効にすると、両方が正しく表示されますが、有効にしたいと考えています。
私が定義した他のオブジェクトも正しく表示されていません。
これらのオブジェクトはGLUTで定義されているので、彼らの法線の問題ではないと推測できますか?
Iは効果のイメージを示す:
ライト定義:
void setLighting(void) {
//setMaterial();
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
glEnable(GL_COLOR_MATERIAL);
//ambient light color variables
GLfloat alr = 0.0;
GLfloat alg = 0.0;
GLfloat alb = 0.0;
//diffuse light color variables
GLfloat dlr = 1.0;
GLfloat dlg = 1.0;
GLfloat dlb = 1.0;
//specular light color variables
GLfloat slr = 1.0;
GLfloat slg = 1.0;
GLfloat slb = 1.0;
//light position variables
GLfloat lx = 0.0;
GLfloat ly = 100.0;
GLfloat lz = 100.0;
GLfloat lw = 0.0;
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
GLfloat LightPosition[] = {lx, ly, lz, lw}; //set the LightPosition to the specified values
GLfloat global_ambient[] = { 0.1f, 0.1f, 0.1f, 1.0f};
glLightModelfv(GL_LIGHT_MODEL_AMBIENT, global_ambient);
glLightModeli(GL_LIGHT_MODEL_TWO_SIDE, GL_TRUE);
glEnable(GL_LIGHTING);
glLightfv (GL_LIGHT0, GL_DIFFUSE, DiffuseLight); //change the light accordingly
glLightfv (GL_LIGHT0, GL_AMBIENT, AmbientLight); //change the light accordingly
glLightfv (GL_LIGHT0, GL_SPECULAR, SpecularLight); //change the light accordingly
glLightfv (GL_LIGHT0, GL_POSITION, LightPosition); //change the light accordingly
}
デプステストとカリング可能:
glEnable(GL_DEPTH_TEST); // Enable the depth buffer
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); // Ask for nicest perspective correction
glEnable(GL_CULL_FACE); // Cull back facing polygons
glCullFace(GL_BACK);
大丈夫ですが、ティーポットはスケールしません。 glutパッケージが付属していますが、キューブと同じ順序で定義してはいけませんか? –
@kelmer:はい、私はそれらがあると思います。ティーポットが大丈夫になったら、キューブが内側になっているとどうして分かりますか?照明に基づいている場合、シーンにはどのようなタイプの光がありますか? – darklon
キューブを連続的に回転させ、照明のために表示します。私は私のライトの定義を示すためにOPを編集しました。 –