point3 vertices[8] ={{-1.0,-1.0,1.0},{1.0,-1.0,1.0}, {1.0,1.0,1.0}, {-1.0,1.0,1.0}, {-1.0,-1.0,-1.0}, {1.0,-1.0,-1.0}, {1.0,1.0,-1.0}, {-1.0,1.0,-1.0}};
GLfloat colors[8][3) = {{0.0,0.0,0.0},{1.0,0.0,0.0}, {1.0,1.0,0.0}, {0.0,1.0,0.0}, {0.0,0.0,1.0}, {1.0,0.0,1.0}, {1.0,1.0,1.0}, {0.0,1.0,1.0}};

void quad(int a, int b, int с , int d) {

glBegin(GL_QUADS);
glColor3fv(colors[a]);
glVertex3fv(vertices[a]);
glColor3fv(colors[b]);
glVertex3fv(vertices[b]);

glColor3fv(colors[с]);

glVertex3fv(vertices!с]);

glColor3fv(colors[d]);
glVertex3fv(vertices[d]); glEnd();
}
void colorcube() 172

Объекты и геометрические преобразования

{
quad(0,3,2,l); quad(2,3,7,6); quad(0,4,7,3); quad(l,2,6,5); quad(4,5,6,7); quad(0,l,5,4);
}

4.4.5. Билинейная интерполяция Недостаточно только указать, каким цветом выводить на экран вершины объекта. Графическая система должна каким-то образом по этим данным раскрасить области, занимаемые на поле изображения гранями объекта, - внутренние области многоугольников. Существует довольно много способов, как "распределить" некоторый атрибут (в данном случае цвет), значение которого фиксировано в вершинах, по внутренней области, ограниченной контуром, построенным на этих вершинах, - интерполировать (interpolate) атрибут. Возможно, наиболее распространенным является метод билинейной интерполяции (bilinear interpolation). Рассмотрим, как этот метод прилагается к задаче интерполяции цвета. Пусть задан четырехугольник, с каждой из вершин которого связан определенный цвет, - С0, Сь Сг, С3 (рис. 4.25). Для определения распределения цвета вдоль любого ребра (линии, связывающей соседние вершины) можно воспользоваться линейной интерполяцией8: С0,(а) = (1-а)С0 + аСь С23(а) = (1-а)С2 + аС3.

Согласно этим уравнениям, при изменении а от 0 до 1 формируются значения цвета С0](а) и С23(а) точек, расположенных на ребрах, соединяющих вершины 0 и 1 и 2 и 3 соответственно. При данном значении а получаем два значения цвета, С4 и С5, для соответствующих точек на двух этих ребрах. По этим значениям можно выполнить еще одну процедуру интерполяции - на сей раз вдоль линии, соединяющей соответствующие точки на двух противолежащих ребрах:


⇐ Предыдущая| |Следующая ⇒