OpenGL入門
平面に光をあてるときの注意点
OpenGLで平面を用意し、光を当てたときに困ったことをメモします。
まずは、下の動画をご覧ください。光源を(0,0,50)から(0,0,0)へ移動させていくときの描画ですが、なにか変です。
そうです。下に敷いてある平面に光の反射がないことです。 この原因は、平面を大きな1枚で表現していたためです。 光が近づいたところから明るくなるようにするためには、 平面を分割することが必要となります。
次の動画は下に敷いている平面の一片を100分割した場合、つまり平面を10000個に分割した場合です。
違和感はなくなりました。
平面の描画関数
///////////////////////////////////////////// // 平面の描画 void drowPlane(double a, double b, int sides, double x, double y, double z){ glPushMatrix(); glTranslated(x, y, z); for(int i=0; i<sides; i++){ for(int j=0; j<sides; j++){ double ax = -a/2.0 + a/double(sides) * double(i); double bx = -b/2.0 + b/double(sides) * double(j); glNormal3d( 0.0,0.0,1.0); glBegin(GL_QUADS); glVertex3d( ax, bx, 0.0); glVertex3d( ax+a/double(sides), bx, 0.0); glVertex3d( ax+a/double(sides), bx+b/double(sides), 0.0); glVertex3d( ax, bx+b/double(sides), 0.0); glEnd(); } } glPopMatrix(); }