ПрограммированиеФорумФизика

Снова угловая скорость. (4 стр)

Страницы: 1 2 3 4 5 Следующая »
#45
18:56, 15 июня 2011

а векторы будут поворачиваться вокруг произвольного вектора или вокруг стандартной системы координат? Мне надо что-бы вокруг произвольного.

#46
23:20, 15 июня 2011

kroonk
Векторы будут поворачиваться самих себя, точнее два вкруг третьего, это то что тебе нужно

#47
17:40, 16 июня 2011

Только-что проверил на практике эту функцию. Всё нормально работает только если я поворачиваю X или Z вокруг Y во всех других случаях значения векторов либо переглючивает либо вообще не меняется.

#48
0:07, 17 июня 2011

kroonk

Поправил ошибки, вставил функции DirectX

// Вращает два вектора в проходящей через них плоскости
D3DXVec3Rotate(D3DXVECTOR3* v1, D3DXVECTOR3* v2, float angle)
{
  float cosa = cosa;
  float sina = sina;
  D3DXVECTOR3 w = *v1 * cosa - *v2 * sina;
  *v2 = *v1 * sina + *v2 * cosa;
  *v1 = w;
}

// Вращает тройку векторов вокруг выбранной оси
void a::Rotate(int axis, float angle)
{
  // почему сразу в радианах не передаешь?
  float ar = angle * M_PI / 180;
  if(axis==0) // Вращ YZ вокруг X
    D3DXVec3Rotate(&VecY,&VecZ,ar);
  else
  if(axis==1) // Вращ ZX вокруг Y
    D3DXVec3Rotate(&VecZ,&VecX,ar);  
  else
  if(axis==2) // Вращ XY вокруг Z
    D3DXVec3Rotate(&VecX,&VecY,ar);
  Normalize();
}


// Нормализует тройку векторов, т.е. делает их единичной длины и взаимно перпендикулярными
void a::Normalize()
{
  D3DXVec3Normalize(&VecX);
  VecY-=VecX*D3DXVec3Dot(&VecY,&VecX);
  D3DXVec3Normalize(&VecY);
  VecZ-=(VecX*D3DXVec3Dot(&VecZ,&VecX)+VecY*D3DXVec3Dot(&VecZ,&VecY));
  D3DXVec3Normalize(&VecZ);
}
#49
3:18, 17 июня 2011

Aslan
> if(axis==0) // Вращ YZ вокруг X
> D3DXVec3Rotate(&VecY,&VecZ,ar);
ну херь же

#50
8:58, 17 июня 2011

Suslik
и что тебе непонятно?
D3DXVec3Rotate - моя функция, читай внимательно

#51
17:19, 17 июня 2011

Suslik
> ну херь же
зато работает.
Теперь всё поворачивается. А как по этим 3 векторам передвинуть объект? У меня 2 варианта: первый это просто прибавить к координатам объекта координаты этих трёх векторов, а второй это как-то добыть одну точку из координат трёх векторов и притянуть к ней объект только как получить эту точку?

#52
17:39, 17 июня 2011

kroonk
эти три вектора - ориентация объекта, можно двигать вдоль одного из них, например VecZ - вперед-назад (обычно так ориентируют), VecX - вправо-влево, VecY - вверх-вниз

Почему бы тебе не пользоваться движком, где все готовое уже есть?

#53
18:05, 17 июня 2011

Aslan
> и что тебе непонятно?
> D3DXVec3Rotate - моя функция, читай внимательно
понял, извиняюсь

#54
18:14, 17 июня 2011

А как правильно эти векторы в матрицу записать? я вот так делаю:

float m[9] = {Ph.VecX.x, Ph.VecY.x, Ph.VecZ.x,
       Ph.VecX.y, Ph.VecY.y, Ph.VecZ.y,
       Ph.VecX.z, Ph.VecY.z, Ph.VecZ.z};
Rot = D3DXMATRIX(m);

но когда я умножаю эту матрицу поворота на матрицу перемещения и трансформирую мир то при отрисовке объект пропадает.

#55
19:58, 17 июня 2011

kroonk
матрица нужна 4х4
векторы можно записать по строкам и по столбцам матрицы, надо знать как принято в DX
и порядок перемножения матриц тоже важен
вобщем читай руководство

#56
9:24, 18 июня 2011

Aslan
> матрица нужна 4х4
Но у меня только три трёхмерных вектора получается 3 на 3. Кстати Suslik тоже сказал что надо матрицу 3x3.
Aslan
> и порядок перемножения матриц тоже важен
я точно уверен что правильно перемножаю матрицы: умножаю матрицу поворота на матрицу перемещения, всегда работало.
Aslan
> вобщем читай руководство
оно на английском а гугл так переводит что получается набор абсолютно бессмысленных слов, сидеть 3 часа со словарём тоже как-то не охота.

#57
11:06, 18 июня 2011

Лучше сидеть 3 часа пока не помогут.

#58
12:04, 18 июня 2011

kroonk
> я точно уверен что правильно перемножаю матрицы: умножаю матрицу поворота на
> матрицу перемещения, всегда работало.

А справа или слева?

#59
12:44, 18 июня 2011

kroonk
В DX как и в OpenGL используют матрицы 4х4, почитай.  Матрица 3х3 задает только ориентацию, а 4х4 - ориентацию и перенос. Получается из 3х3 припиской строки и столбца, состоящих из нулей, только угловой элемент m44=1. Ненулевые элементы в этих позициях и задают перенос и параметры перспективного преобразования (последнее тебе не нужно пока)

Вообще возьми движок какой-нить, так ты далеко не уедешь

Страницы: 1 2 3 4 5 Следующая »
ПрограммированиеФорумФизика

Тема в архиве.