Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Problemillas De Opengl

Iniciado por cholisimo, 19 de Febrero de 2006, 05:12:55 PM

« anterior - próximo »

cholisimo

  Hola tengo un grave problema asique que lo que os pregunte no os sorprenda pero esque tengo un trabajo que entregar para menos de días en Opengl y no se nada de ese lenguaje.
Mi primera pregunta es como dibujar una esfera que no sea de un solo color sino que tenga una mezcla de colores y que se necesita para ejecutar esta instruccion: "glutWireSphere(0.1, 10, 8)".

Sacrifai

 Para esa funcion necesitas GLUT
y para dibujar la esfera tendras que dibujarla con los comandos que incluye opengl. Ojeate los tutoriales de Nehe.

Marci

 Para dibujar una esfera de varios colores se me ocurren dos maneras (me refiero a hacerlo en poco tiempo y sin liarse mucho). La primera consiste en utilizar una textura con el patrón de colores que quieras para la esfera. La segunda seria dibujar cada triangulo de la esfera a mano y elegir su color, ten en cuenta que este es un metodo chapucero para salir del paso, pero basicamente lo que tendrias que hacer es utilizar un programa de diseño 3d como max o blender, dibujar la esfera, elegir los colores de cada parte de la esfera, guardar la esfera en un archivo de texto y despues copiar todos los vertices directamente en el codigo fuente de tu programa.

Sacrifai

 Tambien puedes hacerlo usando algo de trigonometría, que tampoco es tan dificil.

Marci

 
Cita de: " Sacrifai @ 19/02/06"Tambien puedes hacerlo usando algo de trigonometría, que tampoco es tan dificil.
Incluso se podrian conseguir patrones interesantes eligiendo un color para cada paralelo o para cada meridiano. :D  

cholisimo

  Hola bueno he leido mas o menos lo que habeis puesto pero al final la funcion esa la he dejado de poner....
El trabajo que tengo que hacer es simular un sistema solar con la luna, el sol y la tierra. De tal forma que la luna y la tierra simulen sus translaciones y rotaciones. Utilizo el Bloodshev Dev-c++ y mi codigo fuente es:

#include
#include
#include
#include
#include
void myinit(void);
void drawPlane(void);

void CALLBACK dayAdd (void);
void CALLBACK daySubtract (void);
void CALLBACK yearAdd (void);
void CALLBACK yearSubtract (void);
void CALLBACK display(void);
void CALLBACK myReshape(GLsizei w, GLsizei h);
static int day =0, year = 0;

void CALLBACK dayAdd (void)
{
day = (day + 1) % 360;
}
void CALLBACK daySubtract (void)
{
day = (day - 1) % 360;
}

void CALLBACK yearAdd (void)
{
year = (year + 5) % 360;

}
void CALLBACK yearSubtract (void)
{
year = (year - 5) % 360;

}
void CALLBACK display(void)
{
    // Borramos la pantalla antes de dibujar
glClear(GL_COLOR_BUFFER_BIT);
//Datos del Sol
glPushMatrix();
glColor3f (1.0, 1.0, 0.0);// ponemos el color del sol
glPushMatrix();
auxSolidSphere (1.0); //dibujamos el Sol
glPopMatrix();
//Datos del planeta
glRotatef ((GLfloat) year, 0.0, 1.0, 0.0);//Translacion del planeta sobre el sol
glTranslatef (0, 0.0, 2.5f); // lo situamos en la pantalla
glRotatef ((GLfloat) day, 1.0, 0.0, 1.0); // rotamos la tierra sobre si misma
glColor3f (0.0, 0.0, 1.0); //le damos el color al planeta
auxWireSphere (0.2); //dibujamos un planeta de mallas
glPopMatrix();
glPushMatrix(); //fijamos la matriz
//Datos de la luna
glRotatef ((GLfloat) year, 0.0, 1.0, 0.0); // translacion sobre el planeta
glTranslatef (0, 0.0, 3.0f);//la situamos en pantalla
glRotatef ((GLfloat) day, 0.0f, 0.5, 3.0f); //rota sobre si misma
glColor3f (1.0, 0.0, 0.0);
auxWireSphere (0.1);
glPopMatrix();
glFlush();
glPushMatrix();

//fIN LUNA
glFlush();
}
void myinit (void) {
glShadeModel (GL_FLAT);
}
void CALLBACK myReshape(GLsizei w, GLsizei h)
{
h = (h == 0) ? 1 : h;
glViewport(0, 0, w, h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(90.0, (GLfloat) w/(GLfloat) h, 1.0, 20.0);
glMatrixMode(GL_MODELVIEW);//iniciamos la pila en la que metemos los objetos
glLoadIdentity();
glTranslatef (0.0, 0.0, -5.0);
}
/* Programa principal.
* Abre la ventana con el tamaño inicial, una barra de titulo,
* modo de pantalla RGBA, y maneja los eventos de entrada.
*/
int main(int argc, char** argv)
{
auxInitDisplayMode (AUX_SINGLE | AUX_RGB);
auxInitPosition (0, 0, 500, 500);
auxInitWindow ("Composición de transformaciones de modelado");
myinit ();
auxKeyFunc (AUX_LEFT, yearSubtract);
auxKeyFunc (AUX_RIGHT, yearAdd);
auxKeyFunc (AUX_UP, dayAdd);
auxKeyFunc (AUX_DOWN, daySubtract);
auxReshapeFunc (myReshape);
auxMainLoop(display); //llamada para dibujar
return(0);
}


Lo unico que conseguido es dibujar la luna, el sol y la tierra. Y con el teclado (flecha arriba, abajo, dcha e izqda) he consegido que la tierra y la luna roten sobre si misma y se transaladen alrededor de sol. Pero como ya sabeis la luna gira al rededor de la tierra no del sol. Algien me puede hechar una mano en el codigo y poner el codigo modificado para hacer que la luna se desplace.

ethernet

 Ese ejercicio es para que aprendas como funciona opengl en cuanto a transformaciones geométricas se refiere, con lo cual si te lo resolvemos aquí no te ayudará en nada y te quedarás igual. Si investigas por ti mismo y lo sacas no lo olvidarás nunca. De todas maneras te daré una pequeña ayuda: En opengl el sistema de transformación va así:



glTranslatef(...);
glRotatef(...)
glScalef(...)
DrawObjetc();


EN este código primero se escalará el objeto, después se rotará y por último se transladará.

Solo tienes que extrapolar a tu caso este particular.

Suerte y ánimo con el problema.






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.