myszka w opengl

JA
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 25
0

Cześć, mam problem z kawałkiem zadania z openGL. mam już stworzone obiekty (koła, kwadraty itp.) i wrzucone to do jednej listy i teraz potrzebuję usuwać kliknięte obiekty. nie wiem jak zapisać to w funkcji obsługującej myszkę, mam coś takiego na razie:

Kopiuj
std::list<Figury*> lista;

void display()...
void keybord()..

void onMouseButton(int button, int state, int x, int y)
{
	double openglX = ((double)x - 400) / 800 * 6.68;
	double openglY = -((double)y - 300) / 600 * 3.34;

	
		if (button == GLUT_LEFT_BUTTON && state == GLUT_UP) {
			for (auto it = vec.begin(); it != vec.end();) {
				if () {
					it = vec.erase(it);
				}
				else {
					it++;
				}
			}
		
		}
	
	
}




ale nie wiem jak to rozwinąć :/

Patryk27
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Wrocław
  • Postów: 13042
0

Najprostsza sytuacja występuje wtedy, gdy masz kamerę ortogonalną - wtedy sprawdzanie kolizji jest stosunkowo proste i ogranicza się do tzw. point in polygon hit testing, co powinieneś być w stanie bez problemu napisać sam.

Btw, Twój kod (mimo braku prawidłowej instrukcji warunkowej) zawiera poważny bug - poczytaj o iterator invalidation.

Spine
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 6992
2

Skoro masz koła/kwadraty, to masz obiekty 2D.
Musisz napisać funkcje, które sprawdzą, czy pozycja kliknięcia znajduje się w danej figurze.

Zakładając, że dobrze liczysz pozycję kliknięcia, to powinieneś napisać metodę wirtualną w klasie Figury i ją przeciążyć w klasie Kwadrat i Koło.
Metoda ta powinna przyjąć pozycję kliknięcia, a przeciążone metody powinny wykrywać, czy ta pozycja znajduje się w figurze. Zwracamy bool. True jeśli pozycja myszy znajduje się w figurze, false, jeśli nie.
Ciało pętli, którą pokazałeś, będzie wyglądać mniej więcej tak (nie piszę w C++ od dawna...):

Kopiuj
                if (it->kolizja(openglX, openglY)) {
                    it = vec.erase(it);
                    break;
                }

                it++;
JA
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 25
1

Dzięki za pomoc Spine - potrzebowałem takiego właśnie uporządkowania mojego myślenia. Napisałem metody do koła i prostokąta/kwadrata i wszystko śmiga. Dzięki jeszcze raz :D

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.