Skocz do zawartości

Zaznaczanie w 3D?


Reak

Polecane posty

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 do komentarza
Udostępnij na innych stronach

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 do komentarza
Udostępnij na innych stronach

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 do komentarza
Udostępnij na innych stronach

Zarchiwizowany

Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.

×
×
  • Utwórz nowe...