1

Тема: Як перетворити Vector3 в Quaternion ?

Я питав як знайти напрямок об'экта з врахуванням повороту...
Як це зробити формулою я так i не зрозумiв.
Але в исходному кодi Unity знайшов як це там зроблено.
I все працюэ але функцiя перетворення Vector3 в Quaternion там якась дивна.

public static Quaternion Euler(Vector3 euler)
{
       return Quaternion.Internal_FromEulerRad(euler * 0.0174532924f);            
}    
private static Quaternion Internal_FromEulerRad(Vector3 euler)
{
     Quaternion result;
     Quaternion.INTERNAL_CALL_Internal_FromEulerRad(ref euler, out result);
     return result;
}
[WrapperlessIcall]
[MethodImpl(MethodImplOptions.InternalCall)]
private static extern void INTERNAL_CALL_Internal_FromEulerRad(ref Vector3 euler, out Quaternion value);    

Я так розумiю INTERNAL_CALL_Internal_FromEulerRad натив з C++
Як що хтось знаэ що в середенi INTERNAL_CALL_Internal_FromEulerRad або як це зробити ?
Допоможiть будь ласка

2

Re: Як перетворити Vector3 в Quaternion ?

це питання мало стосується сісярпу. Це вам тре почитати, шо таке кватерніони і т.д.
озьдо інфа по переведенню Ейлерського поворота в кватерніон
http://www.euclideanspace.com/maths/geo … /index.htm

Подякували: Fox1

3

Re: Як перетворити Vector3 в Quaternion ?

Ого... Як би я ще знав математику

4

Re: Як перетворити Vector3 в Quaternion ?

FakiNyan написав:

це питання мало стосується сісярпу. Це вам тре почитати, шо таке кватерніони і т.д.
озьдо інфа по переведенню Ейлерського поворота в кватерніон
http://www.euclideanspace.com/maths/geo … /index.htm

public static Covert Euler(Vector3 euler) {
        double c1 = Math.Cos(euler[2] * 0.5);
        double c2 = Math.Cos(euler[1] * 0.5);
        double c3 = Math.Cos(euler[0] * 0.5);
        double s1 = Math.Sin(euler[2] * 0.5);
        double s2 = Math.Sin(euler[1] * 0.5);
        double s3 = Math.Sin(euler[0] * 0.5);

        double[] mData = new double[4];
        mData[0] = c1*c2*s3 - s1*s2*c3;
        mData[1] = c1*s2*c3 + s1*c2*s3;
        mData[2] = s1*c2*c3 - c1*s2*s3;
        mData[3] = c1*c2*c3 + s1*s2*s3;
        return new Covert(mData[0], mData[1], mData[2], mData[3]);
}

Ось знайшов це...
Не пiдкажете чому воно при vector y = 2 повертаэ його бiльш нiж на 90 градусiв ???
Це як можливо взагалi

5

Re: Як перетворити Vector3 в Quaternion ?

Ой... Дойшло.
Треба було ще на 0.0174532924f множити Vector3
FakiNyan, дуже вам дякую