Camel Posted December 7, 2009 Report Share Posted December 7, 2009 Hi all, właśnie skończyłem czytać internet, jestem dużo mądrzejszy, ale nic to, kiedy nadal nie potrafię wykryć kliknięcia na ścianie obiektu 3D. Proszę sobie wyobrazić obracający się w przestrzeni sześcian. Użytkownik klika myszką i trafia w jedną ze ścian. Którą? Nie wiemy, bo sześcian się obraca. A ja muszę wykryć, która to ścianka. Przeczytanie Red Book a także książek w innych kolorach niewiele mi dało. ...................... To była chwila milczenia nad moją niesprawnością umysłową. A teraz wracamy do tematu. Znakomicie wykrywam, że obiekt został kliknięty w glRenderMode( GL_SELECT ) - mam tzw. selection buffer wypełniony danymi. Jak nazwać poszczególne części sześcianu a potem wyssać te dane z bufora? Any advice please? Czy może bufor zawiera informację tylko o tym, że ten sześcian został kliknięty, a aby wykryć w którą ścianę trzeba czegoś więcej? pozdrawiam Camel Link to comment Share on other sites More sharing options...
Force Posted December 13, 2009 Report Share Posted December 13, 2009 to rysuje każdą ścianę osobno z innym identyfikatorem Baza tysięcy lotnisk: http://airportsbase.com Link to comment Share on other sites More sharing options...
jozekkg Posted December 14, 2009 Report Share Posted December 14, 2009 Czasem nawet głupie podpowiedzi mogą naprowadzić na właściwą drogę. Nigdy nie zajmowałem się programowaniem grafiki. (Brak wystaczającej wiedzy, wydajności sprzętowej, chyba też zainteresowania). Co do obracającego się sześcianu. Można wyznaczyć jego środek. Jeśli sześcian obraca się wokół swoich osi głównych, powiedzmy X,Y,Z, to znając chwilowy kąt obrotu, położenie środka geometrycznego sześcianu, oraz położenie kursora w momencie kliknięcia da się określić, która ściana została kliknięta. Niestety jest to nieci zamotane. Link to comment Share on other sites More sharing options...
oozie Posted December 14, 2009 Report Share Posted December 14, 2009 Potraktuj kursor jako punk przez który przechodzi półprosta od punktu gdzie znajduje się kamera poprzez punkt wyznaczony przez kursor w daleką nieskończoność. Następnie zauważ że każda ściana leży na płaszczyźnie. Wobec tego można by obliczyć gdzie półprosta o której wspomniałem wcześniej ,przecina każdą płaszczyznę. Mając punkty przecięcia płaszczyzn wystarczy sprawdzić czy znajdują się one "wewnątrz" danej ściany ( kliknięcie na ścianie) czy też poza polem obszaru ściany. Biorąc już pod uwagę punkty przecięcia płaszczyzn danych ścian i leżące w ich obszarze wystarczy wyznaczyć ten ,który leży najbliżej obserwatora i masz wynik. Wzorów nie podam ale nie są one trudne. Poczytaj jeszcze o wyznaczaniu punktu przecięcia płaszczyzny, napotkasz przy okazji tematy związane z kolizjami czyli wykrywaniem czy dany punkt znajduje się w polu danej figury. Link to comment Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.