п - количество элементов, которые планируется отобразить;

format - описывает формат данных в индексном массиве;

pointer - указатель на первый используемый индекс.

При формировании изображения куба в функции отображения display () нужно шесть раз вызвать функцию glDrawelements ( ), по одному разу на каждую грань:

for(i=0;i<6;i++)
glDrawElements(GL_POLYGON, 4, GL_UNSIGNED_BYTE, &cubelndex[4*i]);

Таким образом, после формирования и инициализации массивов в процессе отображения придется выполнить только шесть вызовов функций OpenGL вместо пятидесяти с лишним. Поворачивать изображение куба можно тем же способом, что и раньше, поскольку функция glDrawElements( ) использует при формировании изображения параметры текущего состояния, в том числе и матрицу вида.

Можно еще больше упростить процесс отображения, если учесть, что каждая грань куба является именно четырехугольником, а не многоугольником общего вида. Тогда можно использовать в функции glDrawelements( )тип GL_QUADS вместо GL_P0LYG0N и вызывать эту функцию в display ( ) только один раз вместо шести вызовов при вычерчивании многоугольников общего вида:

glDrawElements(GL_QUADS, 24, GL_UNSIGNED_BYTE, cubelndices);

Если в glDrawelements ( ) используется тип GL_QUADS, то вычерчивание следующего четырехугольника начинается автоматически после завершения обработки каждой очередной четверки вершин.

4.5. Аффинные преоброзовония Под преобразованием (трансформацией - transformation) в дальнейшем будем понимать функцию, которая принимает (точку или вектор) и отображает ее на другую точку (или вектор). Графически смысл преобразования представлен на рис. 4.28. Для точек преобразование формально записывается в виде

Q=T(P),

а для векторов - в виде

v = /?(м).

При использовании однородных координат и векторы, и точки представляются в виде четырехмерных матриц-столбцов. В таком случае преобразование имеет единообразный вид и для точек, и для векторов одного и того же фрейма:

q=Ap),
v=/u).

Эта формулировка носит слишком общий характер, чтобы ее можно было использовать на практике, поскольку она распространяется на любые однозначные отображения точек и векторов. На практике, даже располагая удобным описанием функции нужно применять преобразование ко всем точкам кривой. Если, например, трансформируется отрезок прямой, обобщенное преобразование придется применить к каждой точке между двумя заданными конечными.


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