2013-08-20 3 views
3

Я нашел this question для преобразования между OpenGL и DirectX, но, похоже, он не работает при выполнении одних и тех же вещей из Unity3D.Матрица проецирования от Unity3D до DirectX

Я надеялся, что здесь есть кто-то, кто знает что-либо о различиях между матрицей проекции OpenGL и матрицей проекции Unity3D (и матрицей просмотра!).

Я также пытался использовать this article, но это тоже не сработало.

В Unity3D я звоню в моей родной C плагином ++:

SetView(MatrixToArray(Camera.current.worldToCameraMatrix)); 
SetProjection(MatrixToArray(Matrix4x4.identity)); 
SetWorld(MatrixToArray(Camera.current.projectionMatrix)); 

private static float[] MatrixToArray(Matrix4x4 _matrix) 
{ 
    float[] result = new float[16]; 

    for (int _row = 0; _row < 4; _row++) 
    { 
     for (int _col = 0; _col < 4; _col++) 
     { 
      result[_col + _row * 4] = _matrix[_row, _col]; 
     } 
    } 

    return result; 
} 

И в моем плагине C++ Я пытаюсь преобразовать эти матрицы через the article:

extern "C" void EXPORT_API SetProjection(float a[]) 
{ 
    g_Proj._11 = a[0]; 
    g_Proj._21 = a[1]; 
    g_Proj._31 = -a[2]; 
    g_Proj._41 = a[3]; 
    g_Proj._12 = a[4]; 
    g_Proj._22 = a[5]; 
    g_Proj._32 = -a[6]; 
    g_Proj._42 = a[7]; 
    g_Proj._13 = a[8]; 
    g_Proj._23 = a[9]; 
    g_Proj._33 = -a[10]; 
    g_Proj._43 = a[11]; 
    g_Proj._14 = a[12]; 
    g_Proj._24 = a[13]; 
    g_Proj._34 = -a[14]; 
    g_Proj._44 = a[15]; 
} 

extern "C" void EXPORT_API SetView(float a[]) 
{ 
    g_View._11 = a[0]; 
    g_View._21 = a[1]; 
    g_View._31 = -a[2]; 
    g_View._41 = a[3]; 
    g_View._12 = a[4]; 
    g_View._22 = a[5]; 
    g_View._32 = -a[6]; 
    g_View._42 = a[7]; 
    g_View._13 = -a[8]; 
    g_View._23 = -a[9]; 
    g_View._33 = a[10]; 
    g_View._43 = -a[11]; 
    g_View._14 = a[12]; 
    g_View._24 = a[13]; 
    g_View._34 = a[14]; 
    g_View._44 = a[15]; 
} 

Я знаю вещи рисуются , потому что использование матрицы тождества для матрицы представлений и проекций дает мне треугольник для вершин: {0,0,0}, {0,1,0}, {1,0,0}. И я также вижу все виды сдвигающих эффектов при перемещении камеры.

EDIT - дополнительная информация:
Unity3D Documentation сообщает нам, что он использует нотацию OpenGL.

EDIT - пример проекта:
Если кто-то хочет попробовать мой код, я создал test project и загрузил его на форум единства.

ответ

0

article Кажется, что все работает нормально, но кажется, что во всех моих попытках и попытках я установил матрицу проекций в мировой матрице.

SetProjection(MatrixToArray(Matrix4x4.identity)); 
SetWorld(MatrixToArray(Camera.current.projectionMatrix)); 

должен был

SetWorld(MatrixToArray(Matrix4x4.identity)); 
SetProjection(MatrixToArray(Camera.current.projectionMatrix)); 

Я положил больше информации о единстве форуме о test project.

Смежные вопросы