Все так банально, что внятное объяснение "как вращать отдельный объект в Директ3Д" найти сейчас довольно сложно. Но это действительно просто. Надо лишь непосредственно перед выводом объекта на экран изменить мировую матрицу на желаемую при помощи метода SetTransform(D3DTS_WORLD, &ourmatrix)
(где &ourmatrix - матрица объекта) и вуаля. Перед выводом на экран к объекту применяется новая матрица, и он отображается так, как необходимо. А чтобы отобразить следующий объект по другому необходимо снова изменить мировую матрицу.
А теперь: "что из себя представляет D3DMATRIX?":
далее...
наша обычная единичная world матрица типа D3DMATRIX имет вид:
D3DMATRIX ourmatrix = {
1, 0, 0, 0,
0, 1, 0, 0,
0, 0, 1, 0,
0, 0, 0, 1
};
к элементам матрицы можно обратиться как ourmatrix.m[i][j]
где:
m[0][0] - x координата вектора Х
m[1][0] - y координата вектора X
m[2][0] - z координата вектора X
m[0][1] - x координата вектора Y
m[1][1] - y координата вектора Y
m[2][1] - z координата вектора Y
m[0][2] - x координата вектора Z
m[1][2] - y координата вектора Z
m[2][2] - z координата вектора Z
m[3][0] - x координата объекта
m[3][1] - y координата объекта
m[3][2] - z координата объекта
Отсюда векторы X, Y и Z имеют длину равную 1, что весьма удобно.
Вращение...
Предположим, что мы хотим повращать наш объект вокруг какой-либо из осей, например вокруг оси Z на некоторый угол b. И это просто, достаточно лишь вспомнить школьный курс тригонометрии и изменить соответствующие координаты векторов в нашей матрице. (мы вращаем относительно вектора Z, следовательно он неподвижен, и его координаты мы не меняем, как и координаты "z" остальных векторов)
Почему "-sin(b)" - ибо это координата "y" поворачиваемого вектора X, а поворачиваем мы его по часовой стрелке, и следовательно новая координата "y" должна быть отрицательной (пока угол меньше 180 градусов )
Перемещение...
С перемещением тоже нет никаких проблем. Достаточно изменить координаты объекта, сиречь - m[3][0], m[3][1] и m[3][2] на координаты нового местоположения.
Масштабирование...
Для масштабирования необходимо использовать m[0][0], m[1][1] и m[2][2]. Умножив каждый элемент на некоторое число, можно получить соответствующий масштаб.
код...