Ayuda para programar aplicación OpenGL en modo ventana

Tengo un proyecto de juego tipo Arkanoid en OpenGL que en su día hice para una asignatura de la facultad (es más bien la base del juego que un juego en si mismo, es decir, sólo un nivel, sin sonido, ni puntuaciones, etc.). El tema es que poco más o menos que me obligaron a hacerlo C# con el Visual Studio.

La idea es portarlo a Linux, y hacerlo en modo ventana (ya que es como lo hice en su día en Visual, quizás la pantalla completa es algo que haga más adelante), pero no sé ni por donde empezar. En linux he hecho un chorro de scripts en bash y programas en C/C++, pero en modo gráfico nunca he hecho nada, por lo que me hallo un poco perdido.

Por de pronto necesito un método que me ejecute un código cada vez que la ventana se redimensione, así como otro método para saber el ancho y alto de la ventana actual.

¿Alguna recomendación (tener en cuenta el OpenGL)? Eso si, me gustaría aclarar entre elegir GTK+ y QT4 prefiero hacerlo en QT4.


Gracias de Antemano

PD: Si, tengo intención de liberar el código por supuesto. Pero claro, primero quiero portarlo y sacar una versión que funcione.
Mírate The Redbook: http://www.opengl.org/documentation/red_book/

Lo explican todo. Llevo poquito leído pero explican eso que preguntas. No te hace falta ni gtk ni qt, GLUT se encarga de las ventanas (si quieres, claro).
xzibit escribió:(..) ¿Alguna recomendación (tener en cuenta el OpenGL)? Eso si, me gustaría aclarar entre elegir GTK+ y QT4 prefiero hacerlo en QT4. Gracias de Antemano (..)


No te recomiendo "portarlo" porque posiblemente te resultará bastante más tedioso que creando todo de nuevo desde cero.

Yo he programado algunas cosas en OpenGL (C/C++), y no es complicado si tienes algo de experiencia programando y dispones de algunos ejemplos básicos que te orienten para empezar. Con GNU/Linux he programado algunas cosas sobre GTK+, o usando librerías como glfw, SDL, o toolkits como wxWidgets. De todas ellas, te recomendaría que usaras SDL directamente (mucho más ligero que con GTK+ o QT si quieres cambiar de plataforma, y con mucho soporte y documentación) aunque a modo de inicio, quizás te interese descargar glfw y examar el código de los ejemplos para observar lo fácil que resulta crear una aplicación en el entorno gráfico. Y si quieres ejemplos adicionales, puedo pasarte alguna de las plantillas queme preparé para generar proyectos con SDL o wxWidgets en Code::Blocks.

Aprovecho para adjuntar una captura de mi escritorio (casi recién estrenado en ArchLinux) corriendo algunas ventanas de diferentes ejemplos (dos con glfw, uno con SDL y otro con wxGTK), que siempre quise hacer algo así, pero nunca lo había hecho :)

Imagen

Saludos.
Muchas gracias a los dos. De momento voy a probar con GLUT, más que nada porque lo que hice en su día era básicamente todo en GLUT. He estado compilando los ejemplos del libro rojo y la verdad es que es todo más sencillo de lo que pensaba. Lo único es mirarme a fondo los modos de ventana del propio GLUT así como los métodos de GLUT para el ratón, los cuales no conocía. Además como más me gusta a mi programar es en C o C++ a pelo, así que con esto perfecto.

En cuanto a empezarlo 100% desde 0 pues como no me hace mucha gracia, primero lo que tengo es básicamente GLUT adaptado a la programación orientada a eventos típica del Visual Studio, y segundo porque tengo implementado un motor de colisiones propio, un montón de materiales y otras cosas que me gustaría aprovechar.

Eso si, en un futuro me pondré con el SDL, más que nada para ver como es el motor de colisiones que implementa, así como para meterle sonido al juego.
¿Has mirado openscenegraph? A mi me parece bastante cómodo si sabes algo de C++ y orientación a objetos.

Saludos.
xzibit escribió:(..) De momento voy a probar con GLUT, más que nada porque lo que hice en su día era básicamente todo en GLUT (..)


GLUT, a parte de llevar más de 10 años parado por completo, no es libre. Si quieres, puedes echarle un ojo a freeGLUT, la alternativa opensource a GLUT. En abril de este año lanzaron la versión 2.6.0RC1. Más info aquí.

(..) como más me gusta a mi programar es en C o C++ a pelo (..)


Si buscas sencillez y hacerlo todo (o casi) tú mismo, insisto recomendándote glfw. Bajar el código de la librería y compilarlo tú mismo te lleva dos minutos (si lo haces, no olvides bajar los dos manuales en pdf). Y a parte de crear ventanas (incluyendo pantalla completa) para tus contextos opengl y facilitarte todo lo relacionado al manejo de la entrada (teclado y ratón), texturas, hilos, timing,... y poco más, lo demás tendrás que desarrollarlo tú mismo.

(..) En cuanto a empezarlo 100% desde 0 pues como no me hace mucha gracia (..)


Como comentabas que sólo tenías la base, sin sonido, ni niveles (salvo el inicial), ni muchas otras cosas, supuse que no sería mucho el código. De todos modos, no me refería a empezarlo "from the scratch", sino a aprovechar las rutinas que puedas (que eso siempre se hace), pero empezando un nuevo proyecto limpio, sin intentar mantener la lógica o planteamientos del actual.

Es que eso de "portar" me sonaba a que intentarías "traducir" todo lo posible del proyecto de Visual Studio en C#... y eso intuyo que va a ser un quebradero de cabeza.

Un saludo.
Si estás interesado en poner sonido mejor pásate al SDL, que tiene el SDL sound y es bastante sencillo de utilizar. De todas maneras al final es muy similar al GLUT, así que puedes hacer el traspaso fácilmente.
Antes de nada, gracias a todos!!

Deschamps escribió:
xzibit escribió:(..) De momento voy a probar con GLUT, más que nada porque lo que hice en su día era básicamente todo en GLUT (..)


GLUT, a parte de llevar más de 10 años parado por completo, no es libre. Si quieres, puedes echarle un ojo a freeGLUT, la alternativa opensource a GLUT. En abril de este año lanzaron la versión 2.6.0RC1. Más info aquí.

(..) como más me gusta a mi programar es en C o C++ a pelo (..)


Si buscas sencillez y hacerlo todo (o casi) tú mismo, insisto recomendándote glfw. Bajar el código de la librería y compilarlo tú mismo te lleva dos minutos (si lo haces, no olvides bajar los dos manuales en pdf). Y a parte de crear ventanas (incluyendo pantalla completa) para tus contextos opengl y facilitarte todo lo relacionado al manejo de la entrada (teclado y ratón), texturas, hilos, timing,... y poco más, lo demás tendrás que desarrollarlo tú mismo.


Cuando decía GLUT en realidad me estaba refiriendo a la implementación freeglut. De hecho ahora tengo instalado en mi Debian tanto freeglut como glfw, y estoy mirándome esos dos manuales de este último. De momento voy a hacer lo que pueda con el freeglut y si ya veo que con esta librería me falta algo (lo de los timings por ejemplo), ya lo trato de hacerlo con glfw.

Deschamps escribió:
(..) En cuanto a empezarlo 100% desde 0 pues como no me hace mucha gracia (..)


Como comentabas que sólo tenías la base, sin sonido, ni niveles (salvo el inicial), ni muchas otras cosas, supuse que no sería mucho el código. De todos modos, no me refería a empezarlo "from the scratch", sino a aprovechar las rutinas que puedas (que eso siempre se hace), pero empezando un nuevo proyecto limpio, sin intentar mantener la lógica o planteamientos del actual.

Es que eso de "portar" me sonaba a que intentarías "traducir" todo lo posible del proyecto de Visual Studio en C#... y eso intuyo que va a ser un quebradero de cabeza.

Un saludo.


Ok, ahora si que entiendo. Es justo lo que pensaba hacer, aprovechar todo lo que hice de dibujado (los bloques y sus animaciones, la plataforma, los bordes, la bola, los materiales, la lista de dibujado, etc.) y la parte de colisiones. Los modos de ventana, el ratón como input, y los timings sé que que tengo que replantearlos desde 0, porque tratar de portarlo lo más parecido a lo que hice en su día en C# sería cuando menos chapucero.

Dr.Demencio escribió:Si estás interesado en poner sonido mejor pásate al SDL, que tiene el SDL sound y es bastante sencillo de utilizar. De todas maneras al final es muy similar al GLUT, así que puedes hacer el traspaso fácilmente.


Si, de hecho era justo lo que lo que tenía en mente: usar el sonido por SDL y ya de paso, mirarme el sistema de colisiones que implementa. Luego ya si me dices que la parte OpenGL de SDL es muy similar a GLUT pues probablemente acabe haciéndolo todo en SDL para tenerlo todo unificado en una sólo librería. Eso si, quedaría para más adelante, ya ahora quiero llegar al mismo resultado que hice en su día en C#, y precisamente a partir de este punto, ir evolucionando.
7 respuestas