Это, наверное, довольно простая вещь, но мои знания о прямом x просто не соответствуют тому, чего я пытаюсь достичь.Вращение D3DXVECTOR3 вокруг определенной точки
На данный момент я пытаюсь создать транспортное средство, которое перемещается по местности. Я стараюсь, чтобы автомобиль распознал местность, создав квадрат (4 точки D3DXVECTOR3) вокруг транспортного средства, точки которого каждый определяют высоту местности и соответственно регулируют транспортное средство.
Транспортное средство представляет собой простой объект, полученный из кода образца Microsoft. Он имеет мировую матрицу, координаты, вращения и т. Д.
То, что я пытаюсь достичь, состоит в том, чтобы эти точки двигались вместе с транспортным средством, поворачиваясь, когда он делает это, чтобы они могли определить разницу в высоте. Это требует, чтобы я обновлял очки каждый раз, когда двигался автомобиль, но я не могу за всю жизнь понять, как заставить их правильно вращаться.
Итак, я ищу простой способ повернуть вектор о происхождении (мои координаты транспортных средств).
Эти пункты расположены рядом с колесами транспортного средства, поэтому, если они сработают, они останутся там независимо от поворота оси y.
Heres Что Ive судимое:
D3DXVECTOR3 vec;
D3DXVec3TransformCoord(&vectorToHoldTransformation,&SquareTopLeftPoint,&matRotationY);
SquareTopLeftPoint = vec;
Это привело к точке спиннинг безумно из-под контроля и оставив карту.
xRot = VehicleCoordinateX + cos(RotationY) * (SquareTopleftX - VehicleCoordinateX) - sin(RotationY) * (SquareTopleftZ - VehicleCoordinateZ);
yRot = VehicleCoordinateZ + sin(RotationY) * (SquareTopleftX - VehicleCoodinateX) + cos(RotationY) * (SquareToplefteZ - VehicleCoordinateZ);
BoxPoint относится к вектору, который я пытаюсь повернуть. Автомобиль, конечно, является источником вращения Вращение Y - это количество, которое оно повернуло.
Это код для 1 из 4 векторов в этом квадрате, но я предполагаю, что, как только я получу 1, остальные останутся только копией.
Независимо от того, что я пробовал, либо не перемещается, либо спирали выходят из-под контроля, оставляя карту вместе.
Вот отрывок из моего класса объекта
class Something
{
public:
float x, y, z;
float speed;
float rx, ry, rz;
float sx, sy, sz;
float width;
float length;
float frameTime;
D3DXVECTOR3 initVecDir;
D3DXVECTOR3 currentVecDir;
D3DXMATRIX matAllRotations;
D3DXMATRIX matRotateX;
D3DXMATRIX matRotateY;
D3DXMATRIX matRotateZ;
D3DXMATRIX matTranslate;
D3DXMATRIX matWorld;
D3DXMATRIX matView;
D3DXMATRIX matProjection;
D3DXMATRIX matWorldViewProjection;
//these points represent a box that is used for collision with terrain.
D3DXVECTOR3 frontLeftBoxPoint;
D3DXVECTOR3 frontRightBoxPoint;
D3DXVECTOR3 backLeftBoxPoint;
D3DXVECTOR3 backRightBoxPoint;
}
Я думал, что это можно было бы сделать это с помощью D3DXVec3TransformCoord
D3DXMatrixTranslation(&matTranslate, origin.x,0,origin.z);
D3DXMatrixRotationY(&matRotateY, ry);
D3DXMatrixTranslation(&matTranslate2,width,0,-length);
matAllRotations = matTranslate * matRotateY * matTranslate2;
D3DXVECTOR3 newCoords;
D3DXVECTOR3 oldCoords = D3DXVECTOR3(x,y,z);
D3DXVec3TransformCoord(&newCoords, &oldCoords, &matAllRotations);
Не зная, как формируются ваши матрицы, невозможно понять, что вы на самом деле делаете с этим кодом. Не могли бы вы еще немного рассказать о том, как вы вычисляете эти матрицы? Кроме того, «BoxPoint» не отображается в вашем коде. – Kaganar
Я разместил часть кода объекта, возможно, это поможет. – Digid3vil