Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
WorldtoScreen | Pytania i odpowiedzi
#1
Cześć chłopaki,   Mam to źródło i wszystko działa dobrze. Ale ponieważ nie chcę po prostu COPYPASTA. Jest kilka pytań:     Kod:   GetWindowRect (tWnd, & m_Rect); float flMatrix [4] [4]; // czym dokładnie jest wizjer ?, które informacje są tam przechowywane? bool WorldToScreen (float * from, float * to) {ReadProcessMemory (Process_Dll, ProcessHandle, (LPCVOID) (Process_Dll, Clientdll + 0x4A128E4), & flMatrix, sizeof (flMatrix), NULL); to [0] = flMatrix [0] [0] * od [0] + flMatrix [0] [1] * od [1] + flMatrix [0] [2] * od [2] + flMatrix [0] [3 ]; do [1] = flMatrix [1] [0] * od [0] + flMatrix [1] [1] * od [1] + flMatrix [1] [2] * od [2] + flMatrix [1] [3 ]; // to [0] i [1] to nowe screencordy, prawda? Czy ktoś może wyjaśnić matematyki za obliczenia proszę. float w = flMatrix [3] [0] * od [0] + flMatrix [3] [1] * od [1] + flMatrix [3] [2] * od [2] + flMatrix [3] [3]; // Ale co to jest w? if (w <0,01f) zwraca false; // i dlaczego zwraca, jeśli jest niższa niż 0.01? float invw = 1,0f / w; // dlaczego musimy to zrobić [0] * = invw; // "do [1] * = invw; //" float x = dWidth / 2 + 0,5 * do [0] * dWidth + 0,5; float y = dHeight / 2 - 0,5 * do [1] * dHeight + 0,5; // Czy zmienimy współrzędne na względne screencordy z powodu dWidth / 2 i dHeight / 2 (środek ekranu) na [0] = x + m_Rect. lewo ; do [1] = y + m_Rect. Top ; // i dlaczego musimy to zrobić? return true; }   Mam nadzieję, że możecie mi pomóc i innym ludziom z tymi samymi pytaniami   Greetz i dzięki
Reply
#2
Jest to formuła "przekształcenia i skali".
Reply
#3
TL; DR: Math. Dziedzina zaangażowanych matematyki nazywa się "algebrą liniową" [1] Macierz "world to screen" jest "macierzą transformacji afinicznej" [2] i 4 na 4 dla przestrzeni 3D. Przekształcenie wektora oznacza jego pomnożenie przez macierz. Ten wektor ma 4 komponenty (gdzie czwarty składnik nazywany jest w, wektor 3D rozszerza się poprzez inicjalizację w do 1). [3] Ten w zawiera informacje o tym, czy punkt jest za tobą, co oznacza, że po prostu nie ma na ekranie żadnego punktu, który mógłby go reprezentować. Zwrócenie wartości false oznacza, że tak się stało. Wynikiem jest wektor 4D i ma w, który jest różny od 1 i wymaga korekty przez "podział perspektywiczny" (dzielenie każdego komponentu wektora 4D przez w) w celu umieszczenia współrzędnych we właściwej przestrzeni klipu 2D. Zwróć uwagę, w jaki sposób powoduje to powrót komponentu w do 1. [4] Teraz masz współrzędną 2D w 'przestrzeni spacji', gdzie lewa krawędź ma x współrzędną równą -1, prawą krawędź ma x współrzędną 1, górna krawędź ma y współrzędną 1, a dolna krawędź ma współrzędną -1 (jest to specyficzne dla DirectX) . (0,0) to środek ekranu. Aby uzyskać współrzędne pikseli, należy odpowiednio skalować współrzędne. [1] https://en.wikipedia.org/wiki/Linear_algebra [2] https://en.wikipedia.org/wiki/Transforma...formations [3] http://mathinsight.org/matrix_vector_multiplication [4] https://stackoverflow.com/questions/1726...e-division
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)