Paso 11: Terminando: múltiples cubos y vistas y registrar clics
El algoritmo para generar los cubos es la mejor mi cerebro podría toser hacia fuera, así que si usted tiene un método mejor o encontrar alguna deficiencia en el código, déjeme por favor saber mejoraré mi código.
currentGeometry y objCount se inicializan a
currentGeometry = 1;
objCount = -3;
con cada clic de generar nuevo cubo ambos son incremento.
inicialización es un conjunto de elementos estáticos utilizados para el control de la sentencia if() que contiene las variables para almacenar la ubicación y escala la historia de los anteriores objetos en la escena.
Primer cubo
|| manipular el cube||
Final
Segundo cubo
|| almacenar las transformaciones del cubo anterior [1] || //in una matriz
|| manipular el cube||
|| Cubos de la pantalla de la array||
Final
Tercer cubo
|| almacenar las transformaciones del cubo anterior [2] ||
|| manipular el cube||
|| Cubos de la pantalla de la array||
Final
y así sucesivamente...
Tan larga historia corta, el número de cubos es limitado por el tamaño de la matriz. Para que sepas que es necesario un sistema mejor, tal vez yo a descubrirlo en la próxima versión.
Xposition Yposition Zposition tienda la ubicación de coordenadas en el espacio 3D y Xsize Ysize Zsize guardar la escala. Como se puede ver al comienzo de cada nueva creación de cubo, necesitaba un método para almacenar estos valores del cubo anterior. así que había declarado un arreglo estático inicializar [n] que hace este código todo ejecute sólo una vez al comienzo de la creación de un nuevo objeto, por la variable objCount .
Como se puede ver la creación de cubos es muy chunga y afectan el funcionamiento del programa negativamente.
Echemos un vistazo a la función cube() :
He quitado el código para dibujar el cubo en aras de la claridad.
los argumentos de la función de toman la coordenadas 3D en que desea dibujar el cubo, el tamaño del cubo que desea ser, y que vista está pensada para ir.
Si pasa el valor 1, significa que quiero en la vista principal (vista B)
Si apruebo valor 2 o 3, esto significa que quiero el cubo en uno de los puntos de dos visión de fondo para el frente y la vista lateral.
Una cosa a tener cuidado es antes use glScalef (x, y, z); Asegúrese de utilizar una nueva matriz mediante glPushMatrix() porque escala operaciones del cubo anterior puede ser transferido a un nuevo cubo.
Una cosa que se me olvidaba mencionar es crear el botón haga clic en eventos sí.
Paso 1: Colocar los botones en las posiciones deseadas.
Step2: Proyecto espacio de coordenadas para cada botón individual en un pedazo de papel.
Paso 3: Agregue el código,
Cada clic en el viewport, se controlará si se hace clic en una imagen de botón.
Paso4: Llamar a la función en el bucle principal, cuando se registra un evento click.
Si está registrado un clic del ratón, comprobará si se hace clic en un botón. De hecho, se podría mejorarse comprobando primero que vista se produjo el evento click, si es con los botones, luego Compruebe la enorme red de condiciones if().