Pregunta

Soy muy nuevo en crear juegos (y trabajar en OpenGL en general). Estoy tratando de hacer un juego en 2D, pero he encontrado un punto de tropiezo al tratar de entender la detección de colisiones.

Digamos, por ejemplo, que traduzco la matriz actual, giro y traduzco nuevamente y luego dibujo un punto. ¿Cómo sé dónde está ese punto en relación con cualquier otra cosa que podría haber dibujado?

¿Hay alguna forma de calcular "absoluto" coordenadas de la matriz actual?

¡Por favor explique lo más simple posible! gracias :)

¿Fue útil?

Solución

OpenGL no es un motor de juego sino una biblioteca de renderizado. La detección de colisiones, por otro lado, es una función de la lógica de tu juego. Por lo tanto, no debería tener nada que ver con OpenGL, que es solo el mecanismo de visualización para poner una representación visual en la pantalla: no sabe nada acerca de los objetos de su juego ni contiene datos persistentes útiles sobre ellos. Si intenta almacenar la posición de un objeto en una matriz y moverla a través de transformaciones, eventualmente puede sufrir los efectos de errores acumulativos de coma flotante que conducen a un comportamiento impredecible.

Lo que debe hacer en su lugar es mantener todas las posiciones de sus objetos (y orientaciones, velocidades, etc.) manualmente. Todos los movimientos de objetos deben ser realizados por usted en el código de la aplicación. Cuando llega el momento de renderizar los objetos, lees sus valores actuales y los pasas a OpenGL. Por lo general, toma los datos del polígono para cada objeto de tipo que desea renderizar, lo gira según la orientación de la instancia del objeto, lo traduce por su posición y luego lo procesa. Repita una vez por cuadro.

Si está familiarizado con el Paradigma Modelo-Vista-Controlador , entonces sus objetos de juego son el Modelo, y OpenGL proporciona una Vista. Como tal, debe manipular su Modelo según sea necesario y solo hacer que la Vista se lea cuando sea necesario.

Otros consejos

Es mejor hacer un seguimiento de la posición absoluta de cada objeto.

Frustrante, ¿no es así? Todos los principiantes de OpenGL y programación gráfica tienen preguntas similares a las suyas. Hacer un seguimiento de los diversos marcos de referencia puede ser difícil.

Lo primero que recomendaría es obtener una copia de OpenGL SuperBible de Amazon u otro minorista. Comienza en el comienzo absoluto y progresivamente se construye a partir de ahí. El póster anterior que recomendó el sitio NeHe también está dando buenos consejos.

En cuanto a su pregunta en sí, cuando crea un programa OpenGL puede establecer la "vista de modelo" matriz para ser la identidad (consulte la SuperBible para obtener más información) y todas las coordenadas que establezca en las llamadas glPoint () se definirán en relación con esa matriz como el marco de referencia. Si no hace nada más que llamar a glPoint () de aquí en adelante, todos sus objetos estarán en el mismo sistema de coordenadas absoluto.

Se vuelve complicado cuando comienzas a llamar a glTranslate y glRotate y glLoadMatrix, ya que esas funciones transforman el marco de referencia. Cuando eso sucede, todas las llamadas posteriores a glPoint () son relativas a ese nuevo marco de referencia.

(Como se menciona en otro póster, si desea volver al marco de referencia anterior, debe guardar la matriz de vista de modelo en una pila antes de transformarla, y luego puede "pop" la pila y volver a donde estabas antes.)

Es difícil describir esto en un sitio de soporte, pero piense en ello como una serie de brazos mecánicos en una silla de dentista. Él puede mover la bandeja para estar debajo de la barbilla, luego girarla en ángulo para acunar la barbilla. Cada movimiento independiente puede considerarse como una transformación, implementada en OpenGL como una matriz.

Como dije, es difícil describir esto correctamente en línea. Tome el libro SuperBible y tendrá mucho más sentido. ¡Buena suerte!

Cuando aprendí OpenGL, usé los siguientes 2 recursos para todo.

Parece que los tutoriales del juego se han pagado. , vendiendo un CD, pero estaban bien escritos, por lo que podría valer la pena comprarlo.

Sin embargo, NeHe todavía son tutoriales gratuitos en la web, incluyendo este para la detección de colisiones .

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

¿Qué quieres decir con "absoluto"?

Si desea que su punto sea relativo a los puntos anteriores, puede revertir las transformaciones que acaba de hacer: traduzca por el negativo de la segunda traducción, gire en la dirección opuesta alrededor del mismo eje en la misma cantidad, luego traduzca por el negativo de la primera traducción. Esto le dará una transformación de sus nuevas coordenadas al sistema anterior.

Alternativamente, podría usar la transformación que ya tiene para llevar sus puntos antiguos al nuevo sistema de coordenadas.

Mantenga un registro de las posiciones de los objetos en coordenadas mundiales y compárelos directamente.

Para hacer la visualización, use un modelo de cámara y aplique todas sus transformaciones.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top