float uy = (p2.y - pl.y) / axisVectLength;

float uz = (p2.z - pl.z) / axisVectLength;

/* Задается матрица трансляции для перемещения pi

* в начало координат, и выполняется свертка матрицы

* трансляции с matComposite.

*/

translate3D (-pl.x, -pl.y, -pl.z);

/* Матрица matQuatRot инициализируется как единичная. */ matrix4x4SetIdentity (matQuatRot);

matQuatRot [0][0] = ux*ux*oneC + cosA;

matQuatRot [0] [1] = ux*uy*oneC - uz*sinA;

matQuatRot [0][2] = ux*uz*oneC + uy*sinA;

matQuatRot [1][0] = uy*ux*oneC + uz*sinA;

matQuatRot [1][1] = uy*uy*oneC + cosA;

matQuatRot [1]E2] = uy*uz*oneC - ux*sinA;

matQuatRot [2][0] = uz*ux*oneC - uy*sinA;

matQuatRot [2][1] = uz*uy*oneC + ux*sinA;

matQuatRot [2][2] = uz*uz*oneC + cosA;

/* Выполняется свертка матрицы matQuatRot со сложной матрицей. */ matrix4x4PreMultiply (matQuatRot, matComposite);

/* Строится матрица обратной трансляции для точки pi, и

* выполняется ее свертка со сложной матрицей.

*/

translate3D (pl.x, pl.y, pl.z);

}

/* Процедура генерации матрицы трехмерного масштабирования. */ void scale3D (Gfloat sx, GLfloat sy, GLfloat sz, wcPt3D fixedPt) {

Matrix4x4 matScale3D;

/* Матрица масштабирования инициализируется

* как единичная.

*/

matrix4x4SetIdentity (matScale3D); matScale3D [0][0] = sx;

matScale3D [0][3] = (1 - sx) * fixedPt.x;

matScale3D [1][1] = sy;

matScale3D [1][3] = (1 - sy) * fixedPt.y;

matScale3D [2] [2] = sz;

matScale3D [2][3] = (1 - sz) * fixedPt.z;

/* Выполняется свертка матрицы matScale3D со сложной

* матрицей.

*/

matrix4x4PreMultiply (matScale3D, matComposite);

}

void displayFcn (void)


⇐ вернуться назад | | далее ⇒