저는 3D 공간에서 물체의 방향으로 문자를 회전 할 수 있도록 두 벡터 사이의 각도를 계산하려고합니다. 두 벡터 (문자 & 개체), loc_look 및 modelPos 있습니다. 단순함을 위해서 저는 단지 위로 축을 따라 회전하려고합니다 ... 요. loc_look = D3DXVECTOR3 (0, 0, 1), modelPos = D3DXVECTOR3 (0, 0, 15);도트 곱을 사용하여 두 벡터 사이의 각도 계산
올바른 계산으로 보이는이 코드를 작성했습니다. 캐릭터의 룩업 벡터 (loc_look)에 적용되는 회전이 오브젝트의 위치 (modelPos) 값을 초과하므로 내 문제가 발생합니다. 문자 개체를 직면하게 될 것이다, 그래서
또한void CEntity::CalculateOrientationMatrix(D3DXMATRIX *orientationMatrix)
{
D3DXMatrixRotationAxis(&rotY, &loc_up, loc_yaw);
D3DXVec3TransformCoord(&loc_look, &loc_look, &rotY);
D3DXVec3TransformCoord(&loc_right, &loc_right, &rotY);
D3DXMatrixRotationAxis(&rotX, &loc_right, loc_pitch);
D3DXVec3TransformCoord(&loc_look, &loc_look, &rotX);
D3DXVec3TransformCoord(&loc_up, &loc_up, &rotX);
D3DXMatrixRotationAxis(&rotZ, &loc_look, loc_roll);
D3DXVec3TransformCoord(&loc_up, &loc_up, &rotZ);
D3DXVec3TransformCoord(&loc_right, &loc_right, &rotZ);
*orientationMatrix *= rotX * rotY * rotZ;
orientationMatrix->_41 = loc_position.x;
orientationMatrix->_42 = loc_position.y;
orientationMatrix->_43 = loc_position.z;
//D3DXVec3Normalize(&loc_look, &loc_look);
SetYawPitchRoll(0,0,0); // Reset Yaw, Pitch, & Roll Amounts
}
0.1로, 각 반복을 modelPos.x 증가 참고 :
BOOL CEntity::TARGET()
{
if(graphics.m_model->m_enemy)
{
D3DXVECTOR3 modelPos = graphics.m_model->position;
D3DXVec3Normalize(&modelPos, &modelPos);
//D3DXVec3Normalize(&loc_look, &loc_look);
float dot = D3DXVec3Dot(&loc_look, &modelPos);
float yaw = acos(dot);
BOOL neg = (loc_look.x > modelPos.x) ? true : false;
switch (neg)
{
case false:
Yaw(yaw);
return true;
case true:
Yaw(-yaw);
return true;
}
}
else
return false;
}
나는 다음과 같은 코드를 사용하여 문자의 방향 행렬을 회전 : 여기 내 코드입니다 x 축을 따라 움직이면 ... 이제 프로그램을 실행할 때 첫 번째 반복에서는 모든 것이 괜찮습니다 (아직 캐릭터를 회전시키지 않았습니다). 두 번째 반복에서 loc_look.x 값이 modelPos.x 값보다 큽니다 (TARGET 함수에서 내적 계산으로 지정된 각도를 사용하여 문자를 너무 많이 회전 시켰습니다). 따라서 두 번째 반복에서 내 코드는 벡터의 x 값의 차이를 조정하기 위해 문자를 왼쪽으로 회전합니다 ...
문자의 모양 벡터를 너무 크게 회전하지 않도록 어떻게 측정을 강화할 수 있습니까? 가치?
(0,0,1)과 (0,0,15)가 평행하지 않습니까? –
예 ... 좋은 지적이지만 개체가 각 반복마다 오른쪽으로 이동합니다. look.x의 값은 두 번째 반복에서 modelPos.x의 값을 초과 한 다음 그에 따라 조정됩니다 (왼쪽으로 회전). 결과는 흔들리는 영향입니다 (문자가 바르게 반복 된 후 왼쪽으로 반복됩니다). –
"yawing"(Yaw (D3DXToRadian (yaw)) 전에 각도를 라디안으로 변환하려고 시도했는데, 이는 jittering을 방지하지만 각도가 상당히 감소 되었기 때문에 ... lookPad는 결코 modePos 벡터와 같지 않습니다 ... –