Práctico 3- Ejercicio 1

Práctico 3- Ejercicio 1

de Usuario eliminado -
Número de respuestas: 5
Hola!
¿Se pueden aplicar rotaciones dentro de una displaylist?
Ya tengo en mi ejecutable todas las columnas de triangulos, pero no sé como hacer para que triángulos de distintas filas roten a velocidades distintas.
Yo me diseñe una displaylist con los triangulos de una misma fila entre todas las columnas de triangulos, esto es lo más apropiado?.
En respuesta a Usuario eliminado

Re: Práctico 3- Ejercicio 1

de Mauricio Eguia -
Hola.

Empiezo diciendo que el objetivo del ejercicio es trabajar con una displayList por render, eso quiere decir que todas las columnas tienen las mismas rotaciones en los triángulos que la componen.

Imaginate que tenés que dibujar una única columna por render, en donde los triángulos giran a velocidades distintas. Cuando tengas ese código pronto, lo que tenés que hacer es compilarlo en una displayList al inicio del método de dibujado de la escena, hacer 100 llamadas a glCallList y por último una llamada a glDeleteLists.

No llego a entender lo que significa que tengas una displayList con los triángulos de una misma fila entre todas las columnas de triángulos.

Saludos
En respuesta a Mauricio Eguia

Re: Práctico 3- Ejercicio 1

de Usuario eliminado -
Entiendí mejor básicamente qué es lo que hay que hacer.
Pero todavía no encuentro la forma de darles velocidades de rotación a los triangulos de una misma columna, que son los de la misma displayList.

Si yo hago

glRotatef(angulo,0,1,0);
glCallList(id);

realiza la misma rotación en todos los triángulos que forman parte de la display list.

Espero que se entienda!
Saludos. 
En respuesta a Usuario eliminado

Re: Práctico 3- Ejercicio 1

de Mauricio Eguia -
Si hacés una rotación antes de dibujar una geometría (la displayList), dicha rotación va a afectar a todos los vértices!
Lo que vas a tener que hacer es agregar la rotación dentro de la displayList para que afecte sólo una parte de la geometría que se compila en la lista (en este caso es un triángulo de la columna).

Te propongo que dibujes sólo una columna con velocidades de rotación diferentes a cada triángulo pero sin utilizar displayLists.
Cuando tengas eso funcionando, lo que tenés que hacer es: en vez de dibujar la columna, encerrá el código de dibujado en un bloque glNewList() y glEndList().
Después utilizás la displayList recién compilada y la dibujás 100 veces.

Saludos
En respuesta a Mauricio Eguia

Re: Práctico 3- Ejercicio 1

de Usuario eliminado -
Ya había hecho eso que acabás de decir, pero al llamar 100 veces a la dsplaylist en el loop principal se me dibujan 100 triangulos en la misma posicion pero
rotados a diferentes angulos.

Lo que supongo que hay que hacer es:

glNewList(id,..);

glRotatef(angulo,0,1,0);
dibujarTriangulo1();

glRotatef(angulo+1,0,1,0);
dibujarTriangulo2();

...

glRotatef(angulo+7,0,1,0);
dibujarTriangulo7();

glEndList()


...




for (i = 0; i < 100; i++)
glCallList(id);


En respuesta a Usuario eliminado

Re: Práctico 3- Ejercicio 1

de Mauricio Eguia -
Bueno ... fijate que en la letra dice que antes de llamar a glCallList hay que definir el color y la posición de la geometría dibujada por la displayList. Tendría que ser algo como 

for( i = 0; i < 100; i++)
{
glPushMatrix();
glTranslatef( ... ); // posición de la columna i
glColor3f( ... ); // color de la geometría i
glCallList(id);
glPopMatrix();
}

Sino todas las columnas estarían en la misma posición y con el mismo color.

El objetivo del ejercicio no es copiar con lujo de detalle la aplicación que se adjunta a la letra del práctico. Se pretende que tengas una figura geométrica que cambie en el tiempo.
Se presenta una columna de triángulos que rotan, pero la geometría podría ser cualquier otra cosa, la letra no especifica qué geometría o cómo se tiene que modificar según el tiempo.

Saludos