Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
[Pomoc] WorldToScreen dziwne w różnych rozdzielczościach
#1
W końcu udało mi się uzyskać działający WorldToScreen w moich testach. Aby zasymulować gracza docelowego na mapie, pobiegłem do określonego miejsca i odzyskałem swoją własną pozycję, aby oznaczyć ten punkt. Współrzędne wektora to x: 740.0, y: 1789, z: 76.0.   Nadal brakuje mi czegoś w matematyce i nie byłem w stanie tego rozgryźć, mając własną wiedzę z matematyki. Próbowałem użyć tego jako odniesienia:   http://www.unknowncheats.me/forum/co...ld-screen.html   Problem polega na tym, że WorldToScreen działa dokładnie wtedy, gdy moja rozdzielczość ekranu wynosi 640x480. To jest screenize, które mam do gry w trybie okienkowym, kiedy testuję różne rzeczy. Gdy tylko zwiększam rozdzielczość, znacznik "TARGET" porusza się coraz bardziej poza docelową lokalizacją. Dostarczę zrzuty ekranu dla kontekstu - wszystkie etykiety odnoszą się do punktu docelowego (patrząc na przykład na lewo od celu)   640x480 - działa idealnie     Patrząc na marker docelowy   http://mgh.im/imgs/640mid.png     Patrząc w prawo   http://mgh.im/imgs/640right.png     Patrząc topleft   http://mgh.im/imgs/640topleft.png     800x640 - zaczął widzieć małe problemy, porusza się nieco zbyt daleko na zewnątrz, gdy nie patrzy bezpośrednio na niego     Patrząc na cel   http://mgh.im/imgs/800640mid.png     Patrząc w lewo   http://mgh.im/imgs/800left.png     Patrząc w górę po lewej stronie   http://mgh.im/imgs/800topleft.png     1024x600 - główne problemy. Cel nie jest tam, gdzie jest oznaczony, odległość od celu do etykiety wzrasta wykładniczo, aby odwrócić wzrok od celu.     Patrząc na cel   http://mgh.im/imgs/1024mid.png     Poszukuję środka w lewo   http://mgh.im/imgs/1025midleft.png     Patrząc na szczyt centrum   http://mgh.im/imgs/1025midup.png     Patrząc w dół   http://mgh.im/imgs/1024down.png     Patrząc w prawo   http://mgh.im/imgs/1024right.png   Zmiana miejsca docelowego jest bardzo niewielka. Czy ktoś to widział wcześniej? Czy ktokolwiek tutaj ma jakieś pomysły, jak temu zaradzić? Sprawdziłem wszystkie parametry użyte w strukturze RefDef, inne niż zmiana rozdzielczości, jest minimalna różnica dla reszty. przykładowe wyjścia patrząc na roughtly w tym samym miejscu:     Kod:   : - RefDef: ScreenX: 640: - RefDef: ViewAxis: - 0.538194: - RefDef: ViewAxis: 0.826968: - RefDef: ViewAxis: - 0.162696: - RefDef: Pochodzenie: 759.207031: - RefDef: Pochodzenie: 2111.410400: - RefDef: Pochodzenie: 216.125000: - RefDef: FOV_X: 0.637070: - RefDef: FOV_Y: 0.477803     Kod:   : - RefDef: ScreenX: 1024: - RefDef: ViewAxis: - 0.547517: - RefDef: ViewAxis: 0.825077: - RefDef: ViewAxis: - 0.139547: - RefDef: Pochodzenie: 762.078003: - RefDef: Pochodzenie: 2141.428467: - RefDef: Pochodzenie: 216.125000: - RefDef: FOV_X: 0.637070: - RefDef: FOV_Y: 0.477803   Edycja: @ Cre3per wskazał brak ScreenY w powyższym wyjściu. Zapomniałem tylko dodać go do funkcji rejestrowania, znajduje się on w struct i ma poprawną wartość Y.   Moje funkcje WorldToScreen są zasadniczo takie same jak w źródle tutaj:   http://www.unknowncheats.me/forum/ca...4-arev-m1.html   Bezpośredni link z powyższego wpisu:   http://pastebin.com/6rESBGb5
Reply
#2
Kod: typedef struct {char _unkn1 [8]; // int X + int Y int ScreenX; int ScreenY; float FOV_X; float FOV_Y; vec3_t Pochodzenie; vec3_t ViewAxis [3]; char _unkn [4]; vec3_t ViewOffset; int Czas; char _pad [16132]; vec3_t ViewAngles; } CRefDef; Mam screenY w moich refdef_s, po prostu zapomniałem dodać go do wyjścia w tym czasie! Sprawdzanie wartości daje oczekiwaną wartość, np. Kod: RefDef: ScreenX: 640 RefDef: ScreenY: 480 Przepraszam, że trafił w niewłaściwą sekcję, gdzie powinien się udać? Dzięki za opinie!
Reply
#3
Zacytować: Originally Posted by locoloco [CODE] Przepraszam, że trafił w niewłaściwą sekcję, gdzie powinien się udać? Call of Duty 4 Modern Warfare Czy możesz opublikować swój WorldToScreen i do niego zadzwonić? Pokazanie działającego kodu przez kogoś innego i niektóre wartości naprawdę nie pomagają (Obrazy są jednak dobre).
Reply
#4
Dlaczego nie używasz silnika W2S? :]
Reply
#5
Widziałem kilka funkcji Vec3 na liście symboli, które wyglądały interesująco, w szczególności: int Vec3ProjectionCoords (float * arg_0, int * arg_4, int * arg_8) Wygląda na to, że potencjalnie to, co próbuję tutaj zbudować. Jednak wszelkie próby jego użycia spowodowały awarię gry. Czy widziałeś, żeby ktoś z nich korzystał, czy też zrobiłeś to sam? Czuję się tak blisko z funkcją WorldToScreen, której teraz używam, z wyjątkiem błędu w rozdzielczościach powyżej tego, z którym początkowo testowałem. Nadal chciałbym dowiedzieć się, co jest przyczyną tego błędu. Coś musi być nie tak z matematyką w ostatnich dwóch linijkach przed powrotem. Uważam, że to dziwne, ponieważ inni nie napisali nic w użyciu podobnych funkcji W2S - ale nie widzę, co jeszcze może być przyczyną tego. Wszelkie sugestie są mile widziane.
Reply
#6
Twoja matematyka wygląda dobrze, myślę, że problem jest na zewnątrz. Spróbuj użyć innego haka, wyświetl moduł cieniujący zamiast tekstu itp. Czy robisz nawet sprawdzanie haka R_DrawText, aby zagwarantować, że zostanie wywołany tylko raz na klatkę? Czy typedefef DrawText jest poprawny?
Reply




Users browsing this thread: 1 Guest(s)