Пример преобразования растровых картинок находится в проекте Transform_2D.

Преобразования в пространстве Связь однородных и декартовых координат

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

Геометрические преобразования

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

Однородные координаты и преобразования на плоскости уже рассматривались ранее. Координаты в пространстве строятся похожим способом. Однородные координаты точки с декартовыми координатами (х, у, г) задаются четверкой чисел X, У, Z, W. Связь декартовых и однородных координат задается выражениями X = WxJ Y= WywZ= Wz. Задавая разные значения W, можно одной точке трехмерного пространства поставить в соответствие разные однородные координаты. Например, однородным координатам (2,1,0,1) и (20,10,0,10) соответствует одна точка трехмерного пространства с координатами (2, 1, 0). Действительно, в первом случае* = X/W= 2/1 = 2, а во втором случаеx = X/W= =20/10, то есть тоже 2.

При W = 1 декартовы координаты точки совпадают с первыми тремя компонентами ее однородных координат (х=X, у = У, z = Z). Поэтому библиотека DirectX при геометрических преобразованиях переход от координат в трехмерном пространстве к однородным координатам выполняет автоматически. Она получает декартовы координаты вершины и просто добавляет значение Wt равное единице. OpenGL предполагает передачу вершины конвейеру сразу в однородных координатах. При этом можно задавать значение W, отличное от единицы.

Конвейер DirectX выполняет геометрические преобразования вершины, последовательно умножая строку однородных координат, задающих вершину в системе объекта, на матрицу вычисления мировых координат вершины, матрицу преобразования координат в систему, связанную с текущим положением наблюдателя, и матрицу проецирования. Все три матрицы заносятся в конвейер методом SetTransformO интерфейса IDirect3DDevice9. Методу передаются два параметра. Первый параметр определяет тип передаваемой в конвейер матрицы константой D3DTS_W0RLD, D3DTS_VIEW или D3DTS_PR0 J ЕСТ I ON. Второй параметр содержит указатель на передаваемую матрицу. Например, можно объявить матрицу Г, сформировать ее элементы, а потом занести в конвейер при помощи функции Device-> SetTransform(D3DTS_VIEW, &Т).


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