Fecha y hora actual: Viernes 18 Oct 2019 13:17
Índice del Foro

Foros de programación informática, diseño gráfico y Web

En esta comunidad intentaremos dar soporte de programación a todos los niveles, desde principiantes a profesionales de la informática, desarrollo de programas, programación web y mucho más.

como darle movimiento a una pelota en opengl

Responder al Tema

Índice del Foro > Diseño gráfico en general > como darle movimiento a una pelota en opengl

Autor Mensaje
celina
Usuario Iniciado


Registrado: 19 May 2012
Mensajes: 19

Mensaje Publicado: Martes 02 Oct 2012 05:44

Título del mensaje: como darle movimiento a una pelota en opengl

Responder citando

hola alguien podria ayudarme a darle movimiento a una pelota.
este es el codigo de la pelota pero necesito que se desplace hacia arriba y abajo alguien puede decirme como.

#include <stdlib.h>
#include <GL/glut.h>

GLfloat elevacion = 0.0f;
GLfloat azimitud = 0.0f;
GLfloat giro = 0.0f;

//parametros para construir la grilla
#define DEF_floorGridScale 1.0
#define DEF_floorGridXSteps 10.0
#define DEF_floorGridZSteps 10.0

void polarView(GLfloat distance, GLfloat twist, GLfloat elevation, GLfloat azimuth)
{
glTranslated(0.0, 0.0, -distance);
glRotated(-twist, 0.0, 0.0, 1.0);
glRotated(-elevation, 1.0, 0.0, 0.0);
glRotated(azimuth, 0.0, 0.0, 1.0);
}

//Inicializa las propiedades de la fuente de luz
static void init(void)
{
GLfloat light_ambient[] = { 0.75, 0.75, 0.75, 1.0 };
GLfloat light_diffuse[] = { 1.0, 1.0, 1.0, 1.0 };
GLfloat light_specular[] = { 1.0, 1.0, 1.0, 1.0 };
GLfloat light_position[] = { 0.0, 0.0, 1.0, 0.0 };

glLightfv (GL_LIGHT0, GL_AMBIENT, light_ambient);
glLightfv (GL_LIGHT0, GL_DIFFUSE, light_diffuse);
glLightfv (GL_LIGHT0, GL_SPECULAR, light_specular);
glLightfv (GL_LIGHT0, GL_POSITION, light_position);

glEnable (GL_LIGHTING);
glEnable (GL_LIGHT0);
glDepthFunc(GL_LESS);
glEnable(GL_DEPTH_TEST);
}

void display (void)
{


//Defino un material Verde
GLfloat mat_ambient_esfera[] = {0.1, 0.1, 0.1, 1.0f};
GLfloat mat_diffuse_esfera[] = {0.0, 0.7, 0.0, 1.0f};
GLfloat mat_specular_esfera[] = {0.8, 0.8, 0.8, 1.0f};

GLfloat zExtent, xExtent, xLocal, zLocal;
int loopX, loopZ;

glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glMatrixMode( GL_MODELVIEW_MATRIX );
glLoadIdentity();
polarView(15.0f, giro, elevacion, azimitud);

//Dibujo la Grilla
glPushMatrix();
glPushAttrib( GL_LIGHTING_BIT );
glDisable( GL_LIGHTING );
glColor3f( 0.0, 0.7, 0.7 );
glBegin( GL_LINES );
zExtent = DEF_floorGridScale * DEF_floorGridZSteps;
for(loopX = -DEF_floorGridXSteps; loopX <= DEF_floorGridXSteps; loopX++ )
{
xLocal = DEF_floorGridScale * loopX;
glVertex3f( xLocal, 0.0, -zExtent );
glVertex3f( xLocal, 0.0, zExtent );
}
xExtent = DEF_floorGridScale * DEF_floorGridXSteps;
for(loopZ = -DEF_floorGridZSteps; loopZ <= DEF_floorGridZSteps; loopZ++ )
{
zLocal = DEF_floorGridScale * loopZ;
glVertex3f( -xExtent, 0.0, zLocal );
glVertex3f( xExtent, 0.0, zLocal );
}
glEnd();
glPopAttrib();
glPopMatrix();




//Dibuja la esfera de radio 2.5
glMaterialfv (GL_FRONT, GL_AMBIENT, mat_ambient_esfera);
glMaterialfv (GL_FRONT, GL_DIFFUSE, mat_diffuse_esfera);
glMaterialfv (GL_FRONT, GL_SPECULAR, mat_specular_esfera);
glMaterialf (GL_FRONT, GL_SHININESS, 100.0f);
glPushMatrix ();
glTranslatef (-1.0, 1.0, 0.0);
glutSolidSphere (1.0, 16, 16);
glPopMatrix ();

glFlush ();
}

void reshape(int w, int h)
{
glViewport (0, 0, (GLsizei) w, (GLsizei) h);
glMatrixMode (GL_PROJECTION);
glLoadIdentity ();
gluPerspective(30, (GLfloat) w/(GLfloat) h, 1.0, 200.0);
glMatrixMode (GL_MODELVIEW);
}

void keyboard(unsigned char key, int x, int y)
{
switch (key) {
case 'x':
case 'X':
elevacion = elevacion + 10.0f;
glutPostRedisplay();
break;
case 'v':
case 'V':
elevacion = elevacion - 10.0f;
glutPostRedisplay();
break;
case 'y':
case 'Y':
azimitud = azimitud + 10.0f;
glutPostRedisplay();
break;
case 'u':
case 'U':
azimitud = azimitud - 10.0f;
glutPostRedisplay();
break;
case 'z':
case 'Z':
giro = giro + 10.0f;
glutPostRedisplay();
break;
case 'c':
case 'C':
giro = giro - 10.0f;
glutPostRedisplay();
break;
case 27:
exit(0);
break;
}
}

int main(int argc, char **argv)
{
glutInitWindowSize(600, 600);
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
glutCreateWindow(argv[0]);
init();
glutReshapeFunc(reshape);
glutKeyboardFunc(keyboard);
glutDisplayFunc(display);
glutMainLoop();
return 0;
}

Volver arriba
Ver perfil del usuario Enviar mensaje privado
javier_macross
Usuario Iniciado


Registrado: 19 Nov 2014
Mensajes: 16

Mensaje Publicado: Miércoles 19 Nov 2014 05:06

Título del mensaje: como darle movimiento a una pelota en opengl

Responder citando

Hola. Bueno según veo la pelota se mueve haciendo una diagonal. glTranslatef() está realizando una traslación en el eje X y el Y. Si quieres que se mueva hacia arriba Y debe moverse en sentido posivo; si se quiere que se mueva hacia abajo se debe mover en sentido negativo.

Código:
glTranslatef(0.0,1.0,0,0);


Se moverá hacia arriba con una velocidad de 1.0

Código:
glTranslatef(0.0,-1.0,0,0);


Se moverá hacia abajo con una velocidad de 1.0

Se pueden combinar las direcciones como está en tu código, pero si quieres que solo se mueva hacia arriba o hacia abajo, el primer y tercer parámetro de glTranslatef() deben estar en 0.0

No olvides usar la funcion glLoadIdentity() para establecer tu origen de coordenadas a 0

Saludos.
Risa

Volver arriba
Ver perfil del usuario Enviar mensaje privado
Responder al Tema
Mostrar mensajes anteriores:   
Ir a:  
Todas las horas están en GMT + 2 Horas

Temas relacionados

Tema Autor Foros Respuestas Publicado
El foro no contiene ningún mensaje nuevo

Como eliminar mi cuenta del foro

Karlos51 Dudas, criticas constructivas o sugerencias 1 Viernes 24 May 2019 13:25 Ver último mensaje
El foro no contiene ningún mensaje nuevo

Python abrir sin darle al start

Sergi99 Python 0 Lunes 20 May 2019 10:54 Ver último mensaje
El foro no contiene ningún mensaje nuevo

¿Cómo instalar correctamente JDK (Java Develope...

Alfonso Lara Temas generales 2 Martes 07 May 2019 22:09 Ver último mensaje
El foro no contiene ningún mensaje nuevo

¿como puedo obtener un dato de un radiobutton

jose mansilla Programación para dispositivos móviles 0 Jueves 27 Sep 2018 16:08 Ver último mensaje
El foro no contiene ningún mensaje nuevo

COmo puedo entrar a los Menus de una Verifone V...

manuelomeli Temas generales 0 Miércoles 23 May 2018 19:58 Ver último mensaje
Panel de Control
No puede crear mensajes, No puede responder temas, No puede editar sus mensajes, No puede borrar sus mensajes, No puede votar en encuestas,