Reak Posted September 14, 2009 Report Share Posted September 14, 2009 Witajcie, mam taki problem: Mam przestrzeń 3d a w niej załóżmy jeden obiekt. Niektórzy z was zapewne grali kiedyś w strategię w przestrzeni 3d. W takiej strategi można kliknąć na obiekt zeby go zaznaczyć no i własnie tu się pojawia mój problem.Jak mam na niego kliknąć? Myślałem nad rzutowaniem tego punktu 3d na współrzędne tego obiektu w oknie no ale nie wiem czy to jest najlepszy pomysł. A nawet jak jest to jaki tu będzie algorytm.Bardzo proszę o pomoc.Pozdrawiam Link to comment Share on other sites More sharing options...
Force Posted September 14, 2009 Report Share Posted September 14, 2009 Ja to mam tak: Należy stworzyć promień, który zaczyna się w kamerze i idzie w kierunku Twojego punktu. Początek promienia to współrzędna kamery. Kierunek to wektor, gdzie z=1, a x =(2*MouseX-1)/Macierzprojekcji[0,0], y = ((1-Mousey)*2-1)/Macierzprojekcji[1,1] MouseX - 0..1 (czyli dzielimy piksele przez szerokość, a MouseY - 0..1(ale uwaga są od górnego lewego rogu, dlatego są inne przekształcenia aby było od lewego dolnego). Kierunek to punkt na płaszczyźnie oddalonej o 1 punkt od kamery. Jeszcze musimy przemnożyć nasz kierunek przez odpowiednią macierz aby patrzył tam gdzie kamera. Czyli pobieramy macierz transformracji, zerujemy jej kolumne/wiersz, która przesuwa punkt (zalezy czy kolumna czy wiersz od naszej implementacji), odwracamy, wymnażamy przez kierunek, kierunek normalizujemy i gotowe. Kolizje z boxem są trudniejsze, znaczy kod zależy od implementacji wielu rzeczy i nie mogłem sam uzyć gotowego kodu z neta. Ogólnie na lighthouse3d jest o tym Baza tysięcy lotnisk: http://airportsbase.com Link to comment Share on other sites More sharing options...
Reak Posted September 14, 2009 Author Report Share Posted September 14, 2009 A możesz prostą implementację tego podesłać? Link to comment Share on other sites More sharing options...
Force Posted September 15, 2009 Report Share Posted September 15, 2009 Na lighthouse3d.com też są proste implementacje, ale proste implementacje nic nie dają bo mają dużo założeń do innych części kodu, np. jak ma się kolejność mnożenia macierzy, czy np. macierz przesunięcia ma wartości przesunięcia w 4 wierszu czy w 4 kolumnie, z resztą też ważne czy indeksuje się od 0, czy 1, czy wektor mnoży się z prawej strony macierzy czy z lewej. Musisz tam oglądnąć i zrozumieć ich kod, a potem u siebie zastosować po odpowiednich przeróbkach aby pasował do Twojej implementacji Baza tysięcy lotnisk: http://airportsbase.com Link to comment Share on other sites More sharing options...
Reak Posted September 15, 2009 Author Report Share Posted September 15, 2009 No ok a wiesz dokłądnie który to tutek? bo tam jest ich parę Link to comment Share on other sites More sharing options...
Force Posted September 15, 2009 Report Share Posted September 15, 2009 Link Baza tysięcy lotnisk: http://airportsbase.com Link to comment Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.