Jump to content

Picking - jak rozpoznać fragment obiektu?


Camel

Recommended Posts

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

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

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

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...