Металлические детали Н покрывайте текстурой для повышения эрелищности
Значения всех параметров текстуры задаются такими, которые обеспечивают максимальное качество изображения:
// текстуру накладывать медленно, но точно
glTeKParameteri [GLTEXTURE 2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexParameteri IGL_TEXTURE_2D, GL_TEXTURE_MAG_FILTЈR, GL_LINEAR); // смешивать накладываоциеся цвета.
glTexEnvi [GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_BLEND) ; /1 карта координат подобна сфере
glTexGeni (GLS, GL_TEXTUBE_GEN_MODE, GLSPHEREMAP) ; glTexGeni (GL_T, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP) ; glEnabie (GL_TEXTURE_2D>;
// нначе Судет нарисована цилиндрическая Земля glEnabie [GL_TEXTURE_GEN_S ) ; glEnabie (GL_TEXTURE_GEN_T) ;
Обратите внимание, что в этом примере перемешается не объект, а точка зрения наблюдателя:
giPushMatrix;
gluLookAt (10*cos (spin), 5*cos (spin) *sin (spin), 15*sin (spin),
0.0, 0.0, 0.0, 1.0, 0.0, 0.0); glCallList(CyList); glPopMatrix;
He забывайте об этом примере, когда будете рисовать модели, где присутствуют цилиндрические детали, сделанные из металла.
Поверхности, покрытые текстурой, вполне пригодны для создания специальных эффектов. В проекте нз подкаталога Ех93 на такой поверхности видно отражение объектов, располагающихся над ней (рис. 4.66). Само создание эффекта традиционно и заключается в том, что объекты сцены рисуются дважды, а для того чтобы скрыть от наблюдателя эту хитрость, используется буфер трафарета:
giPushMatrix;
gluLookAt[eyex, eyey, eyez, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0); // рисуем стол в плоскости отражения
glEnabie [GL_STENCIL_TEST); // буфер трафарета заполняем 1 там, гле стол glStencilFunc[GL_ALWAYS, 1, 1); // рисовать всегда, шаблон задаем - 1 glStencilGp(GL_REPLACE, GL_REPLACE, GL_RЈPLACE>I // стол не рисуется в буфере кадра glColorMask[FALSE, FALSE, FALSE, FALSE); glCallList(table); // рисуем стол glColorMask[TRUE, TRUE, TRUE, TRUE); // точка отражения If eyey > 0.0 then begin giPushMatrix;
glStencilFunc(GL_EQUAL, 1, 1); // рисуем при 1, только там, где стол glStencilGp [GL__KEEP, GL_KEEP, GL_KEEP) ,-glScalef(1.0, -1.0, 1.0); drawjobjects; // объекты сцены glPopMatrix; end;
glDisable(GL_STENCIL_TEST);
glEnabie(GL_BLEND); //на стол накладывается отражение
glCallList(table);
glDisable(GL_BLEND);
// смотрим сверху
giPushMatrix;
draw_objects; // объекты рисуются обычным образом
glPopMatrix;
glPopMatrix;
|