Domanda

Ho un gioco OpenGL ES che sto hackerando insieme. Una parte di essa consiste nel guardare una grande "mappa-like" area e quindi toccando due volte su una parte per " eseguire lo zoom in " esso. Come utilizzeresti OpenGL ES per fornire questo effetto (dato che potrebbe essere necessario ingrandire le diverse parti della mappa).

Ho sentito parlare di glScale e glOrtho, ma non sono chiaro su come funzionino realmente poiché l'intero mondo openGL è molto nuovo per me.

È stato utile?

Soluzione

Lo zoom 2-D che descrivi potrebbe essere realizzato meglio con Core Animation. NSView (e la sua controparte iPhone NDA) forniscono animazioni implicite quando si cambia il loro frame. Tutto ciò che dovresti fare in questo caso sarebbe impostare l'origine del frame.xe l'origine.y e la dimensione.width e size.height su tali valori per ingrandire la visualizzazione rispetto allo schermo. Se lo facessi e lo avvolgessi nelle chiamate appropriate per avviare e eseguire il commit di un'animazione, otterrai gratuitamente un'animazione con zoom. Core Animation utilizza OpenGL dietro le quinte per le sue animazioni.

Se, tuttavia, ritieni di doverlo fare in OpenGL, posso suggerire un piccolo commento che ho fatto a http://www.sunsetlakesoftware.com/2008/08/05/lessons-molecules-opengl-es ? Sono l'autore di Molecules , un visualizzatore molecolare 3D gratuito per iPhone, e sapevo nulla su OpenGL ES prima di iniziare quel progetto. 3 settimane dopo, è stato nell'App Store al suo lancio.

Le chiamate OpenGL sono piuttosto semplici, è la matematica che le circonda che può farti venire il mal di testa. Lo zoom su oggetti è in realtà piuttosto semplice e può essere fatto spostando la fotocamera o ridimensionando fisicamente gli oggetti. Per Molecules, ho seguito la strada per ridimensionare l'oggetto usando la funzione glScalef (x, y, z), dove x, ye z sono i fattori di scala che si desidera applicare all'oggetto modello. Faccio il mio ridimensionamento in modo incrementale. Cioè, non resetto la matrice di trasformazione all'inizio di ogni fotogramma renderizzato (usando glLoadIdentity ()), ma lo ridimensiono solo in base all'input dell'utente. Se l'utente sposta le dita del 5%, aumenta la scala del 5%.

Ancora una volta, suggerirei Core Animation per lo zoom 2-D che descrivi, ma non è troppo difficile ottenere gli stessi risultati in OpenGL ES.

Altri suggerimenti

Rispettosamente, la risposta è di dedicare qualche giorno all'apprendimento delle basi di OpenGL, e in rete ci sono molti posti migliori rispetto a qui.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top