[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: Spam, Jack  
Вектор направления объекта.
XeqtrДата: Воскресенье, 03 Мая 2009, 20:43 | Сообщение # 1
Начинающий
Группа: Пользователи
Сообщений: 5
Награды: 0
Замечания: 0%
Статус:
Доброго времени суток.

Собственно такой вопрос. Есть обьект(моделька персонажа), как мне заставить его передвигаться в ту сторону куда "смотрит" лицевая часть?

Пробовал работать с векторами, но результатов нет. Если не сложно пожалуста привидите пример или исходник.

P.S
Использую C++ и DirectX.

Сообщение отредактировал Xeqtr - Понедельник, 04 Мая 2009, 13:55
 
XeqtrДата: Понедельник, 04 Мая 2009, 15:09 | Сообщение # 2
Начинающий
Группа: Пользователи
Сообщений: 5
Награды: 0
Замечания: 0%
Статус:
А можно примером кода то чето не получается моделька искажается(((

Да я не исполузую вектор для изменения позиции.
делаю так:

void updatepos(float dt)
{
static float SkmPosX = -20.0f ,SkmPosZ = -70.0f, RtEf = 0.0f;

D3DXMatrixTranslation(&mTranSk, SkmPosX, 40.3f, SkmPosZ);
mWorldSkm=mScalSk*mRotYSk*mTranSk; //матрицу обьекта (mWorldSkm) составляю из матр размера, поворота и положения
// забинтовав на клавиши меняю значение переменных
if( GetAsyncKeyState('Y') & 0x8000f )
{

SkmPosZ -= dt*4.5f;

}

if( GetAsyncKeyState('H') & 0x8000f )
{
SkmPosZ += dt*2.5f;

}
if( GetAsyncKeyState('J') & 0x8000f )
{

RtEf+=dt;
if( RtEf >= 2.0f*D3DX_PI )
RtEf = 0.0f;

D3DXMatrixIdentity(&mRotYSk);
D3DXMatrixRotationY( &mRotOut, RtEf);

}

if( GetAsyncKeyState('G') & 0x8000f )
{
SkmPosX += dt*2.5f;

}
}

Подскажите что и где добавить.

Сообщение отредактировал Xeqtr - Понедельник, 04 Мая 2009, 15:10
 
XeqtrДата: Понедельник, 04 Мая 2009, 20:23 | Сообщение # 3
Начинающий
Группа: Пользователи
Сообщений: 5
Награды: 0
Замечания: 0%
Статус:
Помянял код, делаю вот так:

void updateCharPos(float dt)
{
D3DXVECTOR3 mLookW;
D3DXVECTOR3 mPos;
static float RtEf = 0.0f;
D3DXMATRIX mRotOut;
mLookW = D3DXVECTOR3(0.0f, 0.0f, 1.0f);
mPos = D3DXVECTOR3(-20.0f, 40.3f, -70.0f);

D3DXVECTOR3 dir(0.0f, 0.0f, 0.0f);
if( GetAsyncKeyState('Y') & 0x8000f )
{
dir += mLookW;
}

if( GetAsyncKeyState('H') & 0x8000f )
{
dir -= mLookW;
}
if( GetAsyncKeyState('J') & 0x8000f )
{
RtEf+=dt;
if( RtEf >= 2.0f*D3DX_PI )
RtEf = 0.0f;
D3DXMatrixRotationY( &mRotYSk, RtEf);

}

D3DXVec3Normalize(&dir, &dir);
D3DXMatrixTranslation(&mRotOut, dir.x, dir.y, dir.z);
D3DXMatrixMultiply(&mRotYSk,&mRotYSk,&mRotOut);

D3DXVECTOR3 newPos = mPos + dir*dt*10;
D3DXMatrixTranslation(&mTranSk, newPos.x, newPos.y, newPos.z);
mWorldSkm=mScalSk*mRotYSk*mTranSk;
}

Двигается впред назад, а по вектору не хочет(((

Сообщение отредактировал Xeqtr - Понедельник, 04 Мая 2009, 20:27
 
XeqtrДата: Понедельник, 04 Мая 2009, 21:56 | Сообщение # 4
Начинающий
Группа: Пользователи
Сообщений: 5
Награды: 0
Замечания: 0%
Статус:
Jack,использовал твой совет, работает чуть не коректно, моделька дергается туда-сюда.

void updateCharPos(float dt)
{
D3DXVECTOR3 mLookW, mPos;
static float RtEf = 0.0f;
mPos = D3DXVECTOR3(-20.0f, 40.3f, -70.0f);

if( GetAsyncKeyState('Y') & 0x8000f )
{
mPos +=mLookW*dt;
}

if( GetAsyncKeyState('H') & 0x8000f )
{
mPos -=mLookW*dt;
}
if( GetAsyncKeyState('J') & 0x8000f )
{
RtEf+=dt;
if( RtEf >= 2.0f*D3DX_PI )
RtEf = 0.0f;

D3DXMatrixRotationY( &mRotYSk, RtEf);

}
if( GetAsyncKeyState('G') & 0x8000f )
{
RtEf-=dt;
if( RtEf >= 2.0f*D3DX_PI )
RtEf = 0.0f;

D3DXMatrixRotationY( &mRotYSk, RtEf);
}
mLookW = D3DXVECTOR3(mRotYSk._31,mRotYSk._32,mRotYSk._33);
D3DXVec3Normalize(&mLookW, &mLookW);

D3DXMatrixTranslation(&mTranSk, mPos.x, mPos.y, mPos.z); //записываю новую позицию обьекта в матрицу
mWorldSkm=mScalSk*mRotYSk*mTranSk; //образую матрицу обьекта из 3х
}

Вроде все правильно написал.

 
XeqtrДата: Вторник, 05 Мая 2009, 15:32 | Сообщение # 5
Начинающий
Группа: Пользователи
Сообщений: 5
Награды: 0
Замечания: 0%
Статус:
Jack, все получилось там я чуть скосячил, огромное спасибо за помощь!
 
  • Страница 1 из 1
  • 1
Поиск: