Próbuję wyświetlić serię punktów 3D na ekranie za pomocą perspektywicznej matrycy kamery. Nie mam przestrzeni świata (lub uważam, że jest to matryca tożsamości), a moja kamera nie ma miejsca na kamerę (lub uważam ją za matrycę tożsamości), mam matrycę 4x4 dla mojej przestrzeni obiektów.Wyświetlanie punktu 3D na ekranie 2D za pomocą kamery z perspektywiczną kamerą
Biorę matrycy obiektu i pomnożenie jej przez macierz perspektywy kamery, wytworzonej z następującym sposobem:
Matrix4 createPerspectiveMatrix(Float fov, Float aspect, Float near, Float far)
{
Float fov2 = (fov/2) * (Math.PI/180);
Float tan = Math.tan(fov2);
Float f = 1/tan;
return new Matrix4 (
f/aspect, 0, 0, 0,
0, f, 0, 0,
0, 0, -((near+far)/(near-far)), (2*far*near)/(near-far),
0, 0, 1, 0
);
}
ja następnie odrywając punkt [X, Y, Z, 1], a następnie mnożąc przez wynikowe mnożenie macierzy perspektywy i macierzy obiektów.
Następna część jest tym, w czym się mylę, jestem prawie pewien, że muszę uzyskać te punkty w przedziale -1 i 1 lub 0 i 1, oraz w przypadku posiadania pierwszy zestaw wartości, a następnie pomnożyć punkty przez szerokość i wysokość ekranu dla współrzędnych ekranu wartości xiy odpowiednio lub pomnożyć wartości przez wysokość ekranu/2 i szerokość/2 i dodać te same wartości do odpowiednich punktów.
Każdy krok po kroku mówiący mi, jak można to osiągnąć lub gdzie mógłbym pójść źle z którymkolwiek z tego byłby ogromnie doceniony !! : D
Pozdrawiam wszystkich!
P.S. W przykładzie macierzy tożsamości/tłumaczenia mój format macierzy w moim modelu to:
[1, 0, 0, tx,
0, 1, 0, ty,
0, 0, 1, tz,
0, 0, 0, 1 ]
Tak? Czy to działa? :) – Stringer
Przepraszam, że chcę sprowadzić zmarłych i wszystkich ... Ale w twoim kodzie 'createPerspectiveMatrix' nie powinieneś używać' matrix.m32 = 1.0' i 'matrix.m33 = 0.0'? Jeśli pierwotnie miała to być matryca tożsamości "wypełniona", to wartości te wydają się być zamienione w twoim kodzie. – RectangleEquals
Dzięki, od kiedy zadałem to pytanie, napisałem Zest3D http://www.zest3d.com, więc wymyśliłem to. :) –