Skocz do zawartości

Picking - jak rozpoznać fragment obiektu?


Camel

Polecane posty

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

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

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

Zarchiwizowany

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

×
×
  • Utwórz nowe...