さて、懐中電灯の動作をエミュレートしようとしています。とりあえず、球体にスポットライトを当てようとしています。これで、以下のコードが機能しますが、が180に設定されている場合にのみ機能しGL_SPOT_CUTOFF
ます。これにより、光の均一な分布が作成されます。これは、私が目指していることではありません。他の値に設定しようとすると、機能しなくなります。これがコードです
GLfloat mat_specular[] = { 1.0, 1.0, 1.0, 1.0 };
GLfloat light_pos [4] = {5, 2, -10, 1.0};
glLightfv (GL_LIGHT0, GL_SPECULAR, mat_specular);
glLightfv (GL_LIGHT0, GL_POSITION, light_pos);
glLightf (GL_LIGHT0, GL_SPOT_CUTOFF, 20.0f);
glLightf (GL_LIGHT0, GL_SPOT_EXPONENT, 100.0);
GLfloat spotDir [] = {0.0, 0.0, 0.0};
glLightfv (GL_LIGHT0, GL_SPOT_DIRECTION, spotDir);
glutSolidSphere (2, 20, 20);
glFlush ();
glutSwapBuffers ();
ライティングを有効にして、すべての初期化を行いました。すべての表面法線はglutSolidSphereから計算されるので、他に何が失敗する可能性があるのかわかりません...何かアイデアはありますか?