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();
}



