Читайте также:
|
|
glTexCoord2s(0.5, 1.0) – точка с координатами s = 0.5, t = 1.0, r = 0, q = 1;
glTexCoord3d(0.0, 0.0, 2.0) – точка с координатами s = 0.0, t = 0.0, r = 2.0, q = 1.0;
glTexCoord4f(0.0, 1.0, 0.5, 2.0) – точка с координатами s = 0.0, t = 1.0, r = 0.5, q = 2.0;
GLdouble dvect[3]={0.0, 2.0, 1.0};
glTexCoord3dv(dvect) – точка с координатами s = 0.0, t = 2.0, r = 1.0, q = 1.0.
Функция glTexCoord2*(s, t) присваивает текущим текстурным координатам значение (s, t), и они привязываются к последовательно определяемым вершинам. Обычно каждому вызову glVertex*() предшествует вызов функции glTexCoord2*() – каждая вершина получает новую пару текстурных координат. Например, для того, чтобы определить треугольную грань и наложить на нее текстуру, как на рис. 11.3, посылаем в OpenGL три текстурные координаты и три трехмерные точки:
glBegin(GL_TRIANGLES);
glTexCoord2f(0, 1); glVertex3f(1, 1, 1);
glTexCoord2f(0, 0); glVertex3f(0, 0, 0);
glTexCoord2f(1, 0); glVertex3f(1, 1, 0);
glEnd();
Привязывание к каждой эквивалентно описанию в текстурном пространстве треугольника P с тем же числом вершин, что имеет F. Обычно треугольник P имеет ту же форму, что и F; тогда часть текстуры, лежащая внутри треугольника P, без искажений накладывается на весь треугольник F. В тех случаях, когда треугольники P и F имеют одну и ту же форму, преобразование, несомненно, является аффинным: это масштабирование, сопровождающееся, возможно, поворотом и смещением.
На рис. 11.4 показан общий случай, когда четыре угла текстурного квадрата связываются с четырьмя углами прямоугольника. (На 3 D -грани отмечены текстурные координаты (s, t), связанные с каждым углом.) В данном примере текстура является растровым изображением размером 512/256 пикселей, и она накладывается на прямоугольник с форматным соотношением 512/256, вследствие чего рисунок не искажается. (Отметим, что текстурные координаты s и t по-прежнему изменяются от 0 до 1.)
На рис. 11.5 показано использование текстурных координат, при котором из текстуры делается мозаика – путем повторения этой текстуры. Для этого используются текстурные координаты, лежащие вне интервала [0,1]. Когда в подпрограмме визуализации встречаются значения s и t, лежащие вне единичного квадрата, например s = 2,5, то подпрограмма игнорирует целую часть и использует только дробную часть: 0,5.
По умолчанию OpenGL именно так выкладывает мозаику из текстуры; однако при необходимости вместо этого можно «зафиксировать» данные текстуры.
Таким образом, пара координат (s, t) посылается в графический конвейер вместе с каждой вершиной грани.
Дата добавления: 2015-07-10; просмотров: 102 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Наложение текстуры на грань | | | Визуализация текстуры |