opengl y qt

hola he conseguido dibujar un cuadrado con opengl y qt creator, pero no se como hacer para mover en el eje x por ejemplo este cuadrado, si alguien me puede ayudar se lo agradeceria mucho.

Usando glTranslatef(x, y, z)

Para hacer cualquier tipo de transformación con un objeto (translación, rotación, escala, etc.), primero tenes que poner la matriz de transformación en vista de modelo y reiniciarla a la matriz identidad:

glMatrixMode(GL_MODELVIEW);
glLoadIdentity();

Y después trasladas el objeto con:

glTranslatef(x, y, z);

Teniendo en cuenta que el centro de coordenadas está en el centro de tu pantalla, y que el eje z es perpendicular a la misma y apuntando hacia vos.
En esta página hay varios tutoriales sobre OpenGL:

http://nehe.gamedev.net/

ayudaaaaaa

a ver en que me equivoco o que me hace falta tengo este codigo para poder trasladar un objeto, pero no funciona, la verdad no se que hago mal:

#include < QtOpenGL/qgl.h >
#include < QGLWidget >
#include "GL/glu.h"

GLWidget::GLWidget(QWidget *parent) :
QGLWidget(parent)
{
GLfloat x=0.0;

}
void GLWidget::initializeGL()
{
glClearColor(0.0,0.0,0.0,0.0);

}

void GLWidget::paintGL()
{
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(1.0,1.0,1.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glTranslatef(x,0.0f,0.0f);
gluLookAt (0 ,0 , 5.0,0.0, 0.0, 0.0, 0.0, 1.0, 0.0);
glBegin(GL_QUADS);
glVertex3f(1,1,0);
glVertex3f(-1,1,0);
glVertex3f(-1,-1,0);
glVertex3f(1,-1,0);

glVertex3f(1,1,1);
glVertex3f(-1,1,1);
glVertex3f(-1,-1,1);
glVertex3f(1,-1,1);
glEnd();
glFlush();
x+=0.2f;

}

Revisa los tutoriales de nehe

Revisa los tutoriales de nehe, te falta configurar las propiedades del entorno, la proyección, y varias cosas más.

codigo completo

aqui esta mi codigo completo me funciona perfecto pero no se como usar el keyPressEvent para mover lo que he dibujado:

#include "glwidget.h"
#include
#include
#include "GL/glu.h"
#include

GLWidget::GLWidget(QWidget *parent) :
QGLWidget(parent)
{
GLfloat x;

}
void GLWidget::initializeGL()
{
glClearColor(0.0,0.0,0.0,0.0);

}
void GLWidget::paintGL()
{
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(1.0,1.0,1.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glTranslatef(x,0.0f,0.0f);
gluLookAt (0 ,0 , 5.0,0.0, 0.0, 0.0, 0.0, 1.0, 0.0);
glBegin(GL_QUADS);
glVertex3f(1,1,0);
glVertex3f(-1,1,0);
glVertex3f(-1,-1,0);
glVertex3f(1,-1,0);

glVertex3f(1,1,1);
glVertex3f(-1,1,1);
glVertex3f(-1,-1,1);
glVertex3f(1,-1,1);
glEnd();
glFlush();

}
void GLWidget::resizeGL(int w, int h)
{
glViewport (0, 0, (GLsizei) w, (GLsizei) h);
glMatrixMode (GL_PROJECTION);
glLoadIdentity ();
glFrustum (-1.0, 1.0, -1.0, 1.0, 1.5, 20.0);
glMatrixMode (GL_MODELVIEW);

}
void keyPressEvent(QKeyEvent *e)
{
if (e->key()==Qt::Key_Left)
{

x+=0.1f;

}
}

RE: opengl y qt

Hola

Desconozco totalmente OpenGL, nunca lo he usado, pero imagino que cuando pintas el cuadrado lo haces en unas determinadas coordenadas.

Lo único que tendrías que hacer es guardar en una variable la coordenada X, incrementarla (o decrementarla) y volver a dibujar el cuadrado en la nueva posición.

Como digo, desconozco OpenGL y si las clases relacionadas con OpenGL ya disponen de métodos para facilitar dicha labor.

Saludos

Anuncios Google