Как правило, вы ничего не вращаете, напрямую изменяя вершины.Вместо этого вы используете матрицу (матрица проекции модель-представление) для преобразования данных.Три комбинированные матрицы сводятся к:
- Матрица модели: это матрица, которая используется для позиционирования и ориентации геометрии в мировом пространстве.Если вам нужно только вращение, то установите эту матрицу в качестве матрицы вращения.
- Матрица просмотра: это обратная матрица местоположения вашей камеры.
- Матрица проекции: сглаживает расположения трехмерных вершин в двухмерных координатах на экране.
Обычно вы объединяете все 3 матрицы в одну матрицу MVP, которую используете для выполнения всех 3 преобразований в одной операции.Этот документ объясняет некоторые основы: https://docs.microsoft.com/en-us/windows/win32/dxtecharts/the-direct3d-transformation-pipeline
D3DXMATRIX proj_mat; //< set with projection you need
D3DXMATRIX view_mat; //< invert the matrix for the camera position & orientation
D3DXMATRIX model_mat; //< set the rotation here
D3DXMATRIX MVP;
MVP = model_mat * view_mat * proj_mat; //< combine into a single MVP to set on your shader
Если вы REALLY хотите повернуть данные вершин в буфере, то вы можете установить model_mat в качестве некоторой матрицы вращения, а затем умножьте каждую вершину на model_mat.Проблема заключается в том, что обновление происходит очень медленно (вам необходимо перестраивать весь буфер в каждом кадре, а графический процессор имеет схему для преобразования вершин через матрицу)