Open GL - Dudas sobre openGL gluperspective

 
Vista:

Dudas sobre openGL gluperspective

Publicado por Alejandro Martinez (1 intervención) el 02/10/2011 12:14:44
veran, estoy empezandoa programar con OpenGL, y me he quedado atrancado en la parte de "objetos 3D" estoy intentando crear un cubo y que se vea en perspectiva
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
#include <GL/glut.h> // glut.h incluye opengl.h y glu.h
#include <GL/gl.h>
#include <stdlib.h>
void dibujar();
float theta =0.0f;
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitWindowSize(640,480);//TAMAÑO 
glutInitWindowPosition(10,10);//POSICION VENTANA
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);//RGB. DOUBLE BUFFER y BUFFER DE FONDO
glutCreateWindow("Bad King 1.0");
glutDisplayFunc(dibujar); //Indica a glut que existe la funcion dibujar
glutMainLoop();//Inicia el Main Loop
}
void dibujar() {//DIBUJA TRIANGULO
RECT rect;
glClearColor (0.0f, 0.0f, 0.0f, 0.0f);
            glClear (GL_COLOR_BUFFER_BIT);
            glMatrixMode(GL_PROJECTION);
            glLoadIdentity();
            gluPerspective(100, 0.0, 0.0, 200.0);
            glMatrixMode(GL_PROJECTION);
 
 
            // Muevo para atras el objeto. El punto de vista esta 
	// en la posicion 0,0,0 porque no lo he cambiado, asi que 
	// alejo el objeto para poder verlo.
	glTranslatef(1,0,-2.0);
	// Giro el objeto 30 grados en el eje x, luego otros
	// 30 en el eje y. Es para que quede bonito.
	glRotatef(30,1,0,0);
	glRotatef(10,0,1,0);
            glBegin(GL_QUADS);
	// Cara de arriba
	glColor3f(1,0,0); // rojo
	glVertex3f( 1.0f, 1.0f,-1.0f);
	glVertex3f(-1.0f, 1.0f,-1.0f);
	glVertex3f(-1.0f, 1.0f, 1.0f);
	glVertex3f( 1.0f, 1.0f, 1.0f);
	// Cara de abajo
	glColor3f(1,0,0); // rojo
	glVertex3f( 1.0f,-1.0f, 1.0f);
	glVertex3f(-1.0f,-1.0f, 1.0f);
	glVertex3f(-1.0f,-1.0f,-1.0f);
	glVertex3f( 1.0f,-1.0f,-1.0f);
	// Cara frontal
	glColor3f(0,0,1); // azul
	glVertex3f( 1.0f, 1.0f, 1.0f);
	glVertex3f(-1.0f, 1.0f, 1.0f);
	glVertex3f(-1.0f,-1.0f, 1.0f);
	glVertex3f( 1.0f,-1.0f, 1.0f);
	// Cara trasera
	glColor3f(0,0,1); // azul
	glVertex3f( 1.0f,-1.0f,-1.0f);
	glVertex3f(-1.0f,-1.0f,-1.0f);
	glVertex3f(-1.0f, 1.0f,-1.0f);
	glVertex3f( 1.0f, 1.0f,-1.0f);
	// Cara izquierda
	glColor3f(0,1,0); // verde
	glVertex3f(-1.0f, 1.0f, 1.0f);
	glVertex3f(-1.0f, 1.0f,-1.0f);
	glVertex3f(-1.0f,-1.0f,-1.0f);
	glVertex3f(-1.0f,-1.0f, 1.0f);
	// Cara derecha
	glColor3f(0,1,0); // verde
	glVertex3f( 1.0f, 1.0f,-1.0f);
	glVertex3f( 1.0f, 1.0f, 1.0f);
	glVertex3f( 1.0f,-1.0f, 1.0f);
	glVertex3f( 1.0f,-1.0f,-1.0f);
 
    glEnd();
 
 
            glutSwapBuffers();
 
 
// Se termina de definir los triángulos. 
}

el caso es que me dibuja no un cubo, sino una especie de trangulo que no se ve entero. Y creo que el problema reside en
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
glClear (GL_COLOR_BUFFER_BIT);
            glMatrixMode(GL_PROJECTION);
            glLoadIdentity();
            gluPerspective(100, 0.0, 0.0, 200.0);
            glMatrixMode(GL_PROJECTION);
 
 
            // Muevo para atras el objeto. El punto de vista esta 
	// en la posicion 0,0,0 porque no lo he cambiado, asi que 
	// alejo el objeto para poder verlo.
	glTranslatef(1,0,-2.0);
	// Giro el objeto 30 grados en el eje x, luego otros
	// 30 en el eje y. Es para que quede bonito.
	glRotatef(30,1,0,0);
	glRotatef(10,0,1,0);

pero nose porque no me explicaron muy bien.
Tambien querria saber si con OpenGL se pueden crear videojuegos, es decir dicen que es solo una API para los graficos, entonces ¿como se crea el resto del juego?
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Dudas sobre openGL gluperspective

Publicado por isaac (1 intervención) el 28/11/2011 06:11:49
Acabo de mirar el codigo y acabo de hacer lagunas correciones rapidas para que pudiera correr.

#include <GL/glut.h> // glut.h incluye opengl.h y glu.h
#include <GL/gl.h>
#include <stdlib.h>
void dibujar();
float theta =0.0f;
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitWindowSize(640,480);//TAMAÑO
glutInitWindowPosition(10,10);//POSICION VENTANA
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);//RGB. DOUBLE BUFFER y BUFFER DE FONDO
glutCreateWindow("Bad King 1.0");
glutDisplayFunc(dibujar); //Indica a glut que existe la funcion dibujar
glutMainLoop();//Inicia el Main Loop
}
void dibujar() {//DIBUJA TRIANGULO

glClearColor (0.0f, 0.0f, 0.0f, 0.0f);
glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
glClearDepth(1.0f);
glEnable(GL_DEPTH_TEST);
glViewport(0, 0, (GLsizei)640, (GLsizei)480);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(45, (GLfloat)640/(GLfloat)480, 0.1, 200.0);
glMatrixMode(GL_MODELVIEW);


// Muevo para atras el objeto. El punto de vista esta
// en la posicion 0,0,0 porque no lo he cambiado, asi que
// alejo el objeto para poder verlo.
glTranslatef(1,0,-10.0);
// Giro el objeto 30 grados en el eje x, luego otros
// 30 en el eje y. Es para que quede bonito.
glRotatef(30,1,0,0);
glRotatef(10,0,1,0);
glBegin(GL_QUADS);
// Cara de arriba
glColor3f(1,0,0); // rojo
glVertex3f( 1.0f, 1.0f,-1.0f);
glVertex3f(-1.0f, 1.0f,-1.0f);
glVertex3f(-1.0f, 1.0f, 1.0f);
glVertex3f( 1.0f, 1.0f, 1.0f);
// Cara de abajo
glColor3f(1,0,0); // rojo
glVertex3f( 1.0f,-1.0f, 1.0f);
glVertex3f(-1.0f,-1.0f, 1.0f);
glVertex3f(-1.0f,-1.0f,-1.0f);
glVertex3f( 1.0f,-1.0f,-1.0f);
// Cara frontal
glColor3f(0,0,1); // azul
glVertex3f( 1.0f, 1.0f, 1.0f);
glVertex3f(-1.0f, 1.0f, 1.0f);
glVertex3f(-1.0f,-1.0f, 1.0f);
glVertex3f( 1.0f,-1.0f, 1.0f);
// Cara trasera
glColor3f(0,0,1); // azul
glVertex3f( 1.0f,-1.0f,-1.0f);
glVertex3f(-1.0f,-1.0f,-1.0f);
glVertex3f(-1.0f, 1.0f,-1.0f);
glVertex3f( 1.0f, 1.0f,-1.0f);
// Cara izquierda
glColor3f(0,1,0); // verde
glVertex3f(-1.0f, 1.0f, 1.0f);
glVertex3f(-1.0f, 1.0f,-1.0f);
glVertex3f(-1.0f,-1.0f,-1.0f);
glVertex3f(-1.0f,-1.0f, 1.0f);
// Cara derecha
glColor3f(0,1,0); // verde
glVertex3f( 1.0f, 1.0f,-1.0f);
glVertex3f( 1.0f, 1.0f, 1.0f);
glVertex3f( 1.0f,-1.0f, 1.0f);
glVertex3f( 1.0f,-1.0f,-1.0f);

glEnd();


glutSwapBuffers();


// Se termina de definir los triángulos.
}


Basicamente aqui estan las correciones

glClearColor (0.0f, 0.0f, 0.0f, 0.0f);
glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
glClearDepth(1.0f);
glEnable(GL_DEPTH_TEST);
glViewport(0, 0, (GLsizei)640, (GLsizei)480);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(45, (GLfloat)640/(GLfloat)480, 0.1, 200.0);
glMatrixMode(GL_MODELVIEW);


// Muevo para atras el objeto. El punto de vista esta
// en la posicion 0,0,0 porque no lo he cambiado, asi que
// alejo el objeto para poder verlo.
glTranslatef(1,0,-10.0);
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar