1

シーンでライティングをセットアップしようとしていますが、何らかの理由で機能しません。その理由を突き止めようとしています

OpenGL を初期化する方法は次のとおりです。

glClearColor(0.0, 0.0, 0.0, 0.0);
glClearDepth(1.0);
glDepthFunc(GL_LESS);
glEnable(GL_DEPTH_TEST);
glShadeModel(GL_SMOOTH);
glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
glEnable(GL_COLOR_MATERIAL);
glEnable(GL_LIGHTING);
glEnable(GL_NORMALIZE);
glEnable(GL_LIGHT0);

照明をオンにして描画する方法は次のとおりです。

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 
glLoadIdentity();
GLfloat diffuse0[]={1.0, 1.0, 1.0, 1.0};
GLfloat ambient0[]={1.0, 1.0, 1.0, 1.0};
GLfloat specular0[]={1.0, 1.0, 1.0, 1.0};
GLfloat light0_pos[]={1.0, 1.0, 1,0, 1.0};

glLightfv(GL_LIGHT0, GL_POSITION, light0_pos);
glLightfv(GL_LIGHT0, GL_AMBIENT, ambient0);
glLightfv(GL_LIGHT0, GL_DIFFUSE, diffuse0);
glLightfv(GL_LIGHT0, GL_SPECULAR, specular0);

glLightf(GL_LIGHT0, GL_CONSTANT_ATTENUATION, 2.0);
glLightf(GL_LIGHT0, GL_LINEAR_ATTENUATION, 1.0);
glLightf(GL_LIGHT0, GL_QUADRATIC_ATTENUATION, 2.0);

object->draw();

オブジェクトは照明の影響をまったく受けません

すべての法線が設定され、OpenGL がシーンの照明に必要とするすべての情報

あります...何が欠けていますか?

編集:OK!私は最終的に問題の解決策を見つけました。私のopengl init関数は、ウィンドウを表示する前ではなく、表示した後に呼び出さなければならなかったコードに誤って配置されていたため、問題が発生しました...

4

1 に答える 1

1

オブジェクトの位置を教えてください。

  • 容疑者1:物体と光の位置が遠すぎる
  • 容疑者 2: すべての ATTENUATION 設定を非表示にするか、LINEARATTENUATION を 0.0 にする
于 2012-07-26T12:41:46.313 に答える