PDA

Visualizza la versione completa : [C++] Creare una mappa cliccabile


MegaAlchimista
27-12-2012, 00:09
Durante queste vacanze ho deciso di cimentarmi in una (che per me è ) una sfida: creare un'applicazione con tutte le funzionalità base del famoso gioco da tavolo Risiko.
L'ho scelta perchè contiene tante delle cose che ho studiato ultimamente, ed alcune che invece non ho idea di come si possano implementare.
Ho deciso di scriverla con le OpenGL, argomento per me completamente nuovo, ma del uale possiedo un buon libro.

Sto andando avanti in modo abbastanza spedito, ma non riesco ad immaginare come fare a collegare l'evento (click in un punto) --> (id nazione).

Io al momento ho creato una proiezione ortogonale, ho disegnato un rettangolo piano al quale ho applicato una texture che contiene il planisfero terrestre, ed ho fatto in modo che l'immagine si adatti al resize della finestra, e che sia navigabile tramite WASD e la rotella del mouse.
Ho anche una funzione che mi torna le coodinate del punto nel quale ho cliccato.

Come si può fare? Se cerco mappa c++, o C++ map, ovviamente escono articoli sulle mappe intese come containers

MItaly
27-12-2012, 00:17
Un modo molto semplice, utilizzabile se la mappa non è eccessivamente grande e adatto se le zone sono di forme irregolari, è usare una seconda immagine (delle medesime dimensioni) con ciascuna zona "sensibile" colorata di un colore diverso; di fatto si usa un'immagine indicizzata, e ad ogni ID di colore (ovvero valore del pixel) si fa corrispondere l'ID della zona. In questa maniera, ad ogni click calcoli le coordinate del pixel corrispondente e vai a vedere che "colore" (=indice) c'è, ottenendo così l'ID della zona cliccata (tipicamente si riserva un indice - ad esempio lo zero - per zone non sensibili).

Se la mappa è molto grande e/o non serve una risoluzione eccessiva per le aree sensibili puoi anche realizzare la mappa delle aree sensibili a risoluzione inferiore.

MegaAlchimista
27-12-2012, 00:41
Ci avevo pensato. Solo che è un lavoraccio dal punto di vista grafico: la mia texture è una mappa fisica (la voglio così), con disegnati in nero i contorni delle nazioni.
Dovrei prendere una mappa politica e far combaciare (bene o male) ogni continente.
Dico questo perchè avendoci pensato, ci ho provato, ma è un macello ritagliare un continente, e stirarlo per farlo combaciare con quello della mia texture. Con l'africa e le americhe ho ottenuto un risultato decente, ma con gli altri la difficoltà cresce esponenzialmente fino all'Oceania che è un arcipelago?

Insomma non ho trovato da nessuna parte due mappe uguali , una politica ed una fisica. E due mappe diverse hanno i continenti di forme diverse.

MItaly
27-12-2012, 00:53
Se sono mappe realizzate con la stessa proiezione non dovrebbero essere diverse... :stordita:

Comunque, se hai già disegnati in nero i contorni delle nazioni non puoi usare un qualunque programma di grafica, applicare una soglia facendo diventare nero solo il nero dei bordi e tutto il resto bianco, e quindi andare di "secchiello" per riempire le varie zone di colori diversi?

Loading