// Set The Ambient Lighting For LightO glLightfv ( GL_LIGHTOl, GL_AMBIENT, lightAmb ) ;
// Set The Diffuse Lighting For LightO glLightfv ( GL_LIGHT0, GL_DIFFUSE, lightDif );
// Set The Position For LightO glLightfv ( GL_LIGHT0, GL_POSITION, lightPos ); glEnable ( GL_LIGHT0 ); // Enable Light 0
glEnable ( GL_LIGHTING ); // Enable Lighting
}
void animate () {
angle += 0.75f; angle2 += O.lf;
glutPostRedisplay ();
}
void display () {
glClear ( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
glMatrixMode ( GL_MODELVIEW ); glLoadldentity C);
gluLookAt ( 0, 0, 0, // eye
1,1,1," // center
0,1,0) ; //up
glTranslatef ( 4, 4, 4 ) ; glRotatef ( angle2, 1, -1, 0 ); glTranslatef ( d - 1.5f, d - 1.5f, d - 1.5f );
glTranslatef ( 1.5f, 1.5f, 1.5f ) ;
// move cube from the center
glRotatef ( angle, l.Of, l.Of, O.Of ) ; glTranslatef ( -1.5f, -1.5f, -1.5f );
// move cube into the center
drawBox (, 1, 2, 1, 2, 1, 2 ) ;
glutSwapBuffers ( ) ;
}
Полупрозрачность. Использование а-канала До сих пор мы не рассматривали а-канал (в RGBA-представлении Цвета) и во всех примерах значение соответствующей компоненты всегда равнялось единице. Задавая значения, отличные от единицы, можно смешивать цвет выводимого пиксела с цветом пиксела, уже находящегося в соответствующем месте на экране, создавая тем самым эффект прозрачности.
При этом наиболее естественно думать об этом, считая что RGB-компоненты задают цвет фрагмента, а а-значение - его непрозрачность. Так, если у стекла установить значение а, равное 0.2, то в результате вывода цвет получившегося фрагмента будет на 20 % состоять из собственного цвета стекла и на 80 % - из цвета фрагмента под ним.
Для использования а-канала необходимо сначала разрешить режим прозрачности и смешения цветов командой
glEnable ( GL_BLEND );
В процессе смешения цветов цветовые компоненты выводимого фрагмента RSGSBSAS смешиваются с цветовыми компонентами уже выведенного фрагмента RdGdBdAd по следующей формуле: