Матрицу вращения довольно легко выполнить.
Если вы рассматриваете матрицу, состоящую из 4 строк.
Боковой вектор
Вверх вектор
Вперед вектор
Должность
Вы вычисляете вектор от 0, 0, 0 до камеры. Это просто (camX, camY, camZ) (рассчитывается как положение камеры - начало объекта).
Оттуда у вас теперь есть ваш прямой вектор. Сначала нормализуй это.
Итак, давайте предположим, что вектор роста равен 0, 1, 0.
Вы можете просто скрестить этот вектор вверх и нормализованный вектор вперед. Это дает вам побочный вектор. Наконец, скрестите произведение боковых и прямых векторов, чтобы получить ИСТИНА вверх. и у вас есть 3 верхних ряда вашей матрицы. Последняя строка в любом случае будет 0,0,0,1.
Таким образом, используя D3DX, вы рассчитали бы его следующим образом:
D3DXVECTOR3 toCam = camPos - spherePos;
D3DXVECTOR3 fwdVector;
D3DXVec3Normalize( &fwdVector, &toCam );
D3DXVECTOR3 upVector( 0.0f, 1.0f, 0.0f );
D3DXVECTOR3 sideVector;
D3DXVec3CrossProduct( &sideVector, &upVector, &fwdVector );
D3DXVec3CrossProduct( &upVector, &sideVector, &fwdVector );
D3DXVec3Normalize( &upVector, &toCam );
D3DXVec3Normalize( &sideVector, &toCam );
D3DXMATRIX orientation( sideVector.x, sideVector.y, sideVector.z, 0.0f,
upVector.x, upVector.y, upVector.z, 0.0f,
fwdVector.x, fwdVector.y, fwdVector.z, 0.0f,
spherePos.x, spherePos.y, spherePos.z, 1.0f );