January 29th, 2007

Nombre: Cubo Rubik 3d en OpenGL

Descripción: Una adaptación del Cubo Rubik clásico al PC utilizando OpenGL para mostrar y animar los diferentes movimientos que permiten darle solución.

Funcionamiento: La vista del cubo se podrá rotar mediante el teclado y ratón así:

Las rotaciones sobre el cubo con el ratón se realizan arrastrando este con click derecho empezando en las áreas vacías, para rotar las piezas del cubo se hace con click derecho sobre una de las piezas y haciendo el gesto moviendo el rátón en el sentido en que se desea mover la pieza.

Movimientos cubo mouse La función de rotación del puntero variará dependiendo de la forma en que se visualice el cubo, es decir, el gesto con el ratón debe ser inclinado, no totalmente horizontal, con el fin de describir la forma en que se observa el cubo. Aún así es necesario dar un cierto grado de libertad en la inclinación, con el fin de no molestar al jugador por no poder mover el cubo (mas aún si el cubo se pretender resolver rápidamente).

Al igual que en el juego real, una cara se considera resuelta cuando todas las divisiones de ésta son del mismo color. El cubo se da por resuelto cuando todas las caras sean resueltas.

La organización de colores del cubo deberá ser aleatoria al iniciar el programa y contará con un botón para reiniciar el juego.

El programa indicará los colores de las caras que están resueltas con pequeños rectángulo de color que se encenderán y apagarán de acuerdo a los colores resueltos.

El programa mostrará un tiempo contado a partir del momento en que se mueva la primera pieza del cubo y se detendrá cuando todas las caras estén resueltas o cuando se reinicie el juego, en cuyo caso se volverá 0.

Como requisito opcional se podrán registrar los tiempos mas cortos como hi-scores, acompañados del nombre de quien los realizó.

Stripes

  1. Sistema de Ventana en OpenGL
  2. Cubo lógico básico
  3. Representación gráfica del cubo
  4. Entrada por mouse y teclado
  5. Rotaciones lógicas y gráficas
  6. Verificación de caras
  7. Orden aleatorio del cubo inicial
  8. Marcador de tiempo
  9. Persistencia de los tiempos

Diario de programador

21-01-2007: Bueno, acabo de terminar esta pagina y ya hay tres stripes tachados, realmente el primero es una reutilización de código de una clase ventana que ya tiene un cierto tiempo, lo único que hice fue un poco de mantenimiento y un cambio en el winproc que pronto pienso colocar a manera de code snippet. Por ahora estoy trabajando en la selección por teclado vía selection buffer de OpenGL y es algo importante de lo que pienso hacer un pequeño tutorial.

05-02-2007: Vaya, eso si es tiempo sin actualizar para un proyecto de “poco mas de una semana”. Bueno, de todos modos ya esta resuelta la parte de entrada por teclado y mouse, gracias al arreglo sobre el wndProc y a un poco de diseño. La solución no fue tan sofisticada como aplicar un patrón (estaba pensando en observer), pero es funcional para este proyecto.

13-02-2007: Bueno, ahora estoy aprendiendo a hacer una “virtual trackball” para mover el cubo con el mouse, no parece muy dificil y ayuda bastante a que el modelo del cubo se pueda manejar de manera mas “natural” con el mouse.

16-03-2007: Rayos, este proyecto parece abandonado, en parte por la universidad y por otro proyecto, aún así vuelvo a las andadas. En este momento me dedico a corregir un problema grave con el código de la ventana.

05-02-2008: “Completado” el trackball, en realidad adapte el código arcball de Terence J. Grant bajo licencia MIT, que se puede encontrar en tatewake.com . Este tiene la ventaja de que es bastante estable y eficiente debido a que utiliza quaternions para las rotaciones.