Domanda

Sono molto nuovo nella creazione di giochi (e in OpenGL in generale). Sto cercando di creare un gioco in 2D ma ho riscontrato un punto di inciampo quando ho cercato di capire meglio il rilevamento delle collisioni.

Diciamo, ad esempio, che traduco la matrice corrente, la ruota e la traduco di nuovo, quindi traccia un punto. Come faccio a sapere dove si trova quel punto rispetto a qualsiasi altra cosa che avrei potuto disegnare?

Esiste un modo per calcolare "assoluto" coordinate dalla matrice corrente?

Per favore, spiega il più semplicemente possibile! grazie :)

È stato utile?

Soluzione

OpenGL non è un motore di gioco ma una libreria di rendering. Il rilevamento delle collisioni è invece una funzione della logica del tuo gioco. Pertanto, non dovrebbe avere nulla a che fare con OpenGL, che è solo il meccanismo di visualizzazione per mettere una rappresentazione visiva sullo schermo: non sa nulla dei tuoi oggetti di gioco né contiene dati utili persistenti. Se provi a memorizzare la posizione di un oggetto in una matrice e lo sposti tramite trasformazioni, puoi eventualmente soffrire degli effetti di errori cumulativi in ??virgola mobile che portano a comportamenti imprevedibili.

Quello che dovresti fare invece è mantenere manualmente tutte le posizioni (e gli orientamenti, le velocità, ecc.) dell'oggetto. Tutti i movimenti di oggetti devono essere eseguiti dall'utente nel codice dell'applicazione. Quando arriva il momento di renderizzare gli oggetti, leggi i loro valori correnti e li passi a OpenGL. In genere si prendono i dati poligonali per ciascun oggetto di tipo che si desidera renderizzare, ruotandoli in base all'orientamento dell'istanza dell'oggetto, traducendoli in base alla posizione, quindi renderizzati. Ripeti una volta per fotogramma.

Se hai familiarità con Il paradigma Model-View-Controller quindi i tuoi oggetti di gioco sono il modello e OpenGL fornisce una vista. Pertanto, è necessario manipolare il modello in base alle esigenze e leggere la vista da esso quando necessario.

Altri suggerimenti

È meglio tenere traccia di ogni posizione assoluta degli oggetti.

Frustrante, vero? Tutti i principianti della programmazione grafica e OpenGL hanno domande simili alle tue. Tenere traccia dei vari quadri di riferimento può essere difficile.

La prima cosa che consiglierei è ottenere una copia di OpenGL SuperBible da Amazon o da un altro rivenditore. Inizia all'inizio assoluto e progressivamente si costruisce da lì. Il poster precedente che ha raccomandato il sito NeHe offre anche buoni consigli.

Come per la tua stessa domanda, quando crei un programma OpenGL puoi impostare " modelview " matrice per essere l'identità (vedere la SuperBible per maggiori informazioni) e tutte le coordinate impostate nelle chiamate glPoint () saranno definite in relazione a quella matrice come quadro di riferimento. Se non fai nulla oltre a chiamare glPoint () da qui in poi tutti i tuoi oggetti saranno nello stesso sistema di coordinate assoluto.

Diventa complicato quando inizi a chiamare glTranslate e glRotate e glLoadMatrix, poiché queste funzioni trasformano il frame di riferimento. Quando ciò accade, tutte le successive chiamate glPoint () sono quindi relative a quel nuovo frame di riferimento.

(Come menzionato da un altro poster, se si desidera tornare al precedente fotogramma di riferimento, è necessario salvare la matrice modelview su uno stack prima di trasformarlo, quindi è possibile "pop" lo stack e tornare a dove eri prima.)

È difficile descriverlo su un sito di supporto, ma pensalo come una serie di bracci meccanici su una sedia da dentista. Può spostare il vassoio in modo che sia sotto il mento, quindi ruotarlo inclinandolo per coprire il mento. Ogni movimento indipendente può essere pensato come una trasformazione, implementata in OpenGL come una matrice.

Come ho detto, è difficile descriverlo correttamente online. Prendi il libro di SuperBible e avrà molto più senso. Buona fortuna!

Quando ho imparato OpenGL, ho usato le seguenti 2 risorse per tutto.

Sembra che il gametutorials è stato pagato-per , vendendo un CD, ma erano ben scritti, quindi potrebbe valere la pena acquistarlo.

Tuttavia, NeHe sono ancora tutorial gratuiti sul Web, tra cui questo per il rilevamento delle collisioni .

http://www.gamedev.net/reference/list.asp ? IDCategoria = 31

Che cosa intendi con "assoluto"?

Se vuoi il tuo punto rispetto ai punti precedenti puoi invertire le trasformazioni che hai appena fatto: traduci dal negativo della seconda traduzione, ruota nella direzione opposta attorno allo stesso asse della stessa quantità, quindi traduci dal negativo della prima traduzione. Questo ti darà una trasformazione dalle tue nuove coordinate al vecchio sistema.

In alternativa puoi usare la trasformazione che devi già portare i tuoi vecchi punti nel nuovo sistema di coordinate.

Tieni traccia delle posizioni degli oggetti nelle coordinate del mondo e confrontale direttamente.

Per fare il display, usa un modello di fotocamera e applica tutte le tue trasformazioni.

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