Created
September 5, 2015 17:19
-
-
Save agustinsivoplas/886b4cc0326c5ab71170 to your computer and use it in GitHub Desktop.
main c box
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include "framework/canvas.h" | |
#include "framework/mm.h" | |
#include "vec3.h" | |
#include "GL/gl.h" | |
#include <stdio.h> | |
int main(int argc, char* argv[]) { | |
// printf("La version de OpenGL es %s", glGetString(GL_VERSION)); | |
#ifdef WIN32 | |
freopen("CON", "w", stdout); | |
freopen("CON", "w", stderr); | |
#endif | |
// Crear una ventana de 500x500 pixels: | |
int cw = 500; | |
int ch = 500; | |
cg_init(cw, ch, NULL); | |
// Actualizar la pantalla: | |
cg_repaint(); | |
glMatrixMode(GL_MODELVIEW); | |
glLoadIdentity(); //Destruye lo que tenia y lo reemplaza por la identidad para poder trabajar con una matriz limpia | |
//Primero se escala y luego se traslada, el orden es al reves por la multiplicacion de matrices. | |
// glTranslatef(0.0f, 0.0f, -2.0f); //Trasladamos en segundo lugar | |
// glRotatef(30.0f, 0.0f, 1.0f, 0.0f); | |
// glScalef(0.5f, 0.5f, 0.5f); //Creamos la matriz de scala a la mitad para crear el triangulo a la mitad en primer lugar | |
glMatrixMode(GL_PROJECTION); | |
glViewport(0, 0, cw, ch); //Definimos el tamaño del view port | |
glFrustum(-1, 1, -1, 1, 1, 1000); //seteamos la matriz de proyeccion | |
//5 parametro es D (distancia al foco), 6 parametro la distancia de las cuales dejan de verse los objetos | |
FILE* pf = fopen("box.obj", "r"); | |
if (pf == NULL) { | |
perror("Error opening file"); | |
return (-1); | |
} | |
char linea[256]; | |
Vec3 vertices[8]; | |
Vec3 puntos[12]; | |
//Los vertices son leidos desde la poscion 1 | |
int posVertice = 0; | |
int posPuntos = 0; | |
while (fgets(linea, sizeof (linea), pf)) { | |
char* token; | |
float x; | |
float y; | |
float z; | |
token = strtok(linea, " \t\n"); | |
if (strcmp(token, "v") == 0) { | |
token = strtok(NULL, " \t\n"); | |
x = atof(token); | |
token = strtok(NULL, " \t\n"); | |
y = atof(token); | |
token = strtok(NULL, " \t\n"); | |
z = atof(token); | |
init(&vertices[posVertice], x, y, z); | |
posVertice++; | |
} | |
if (strcmp(token, "f") == 0) { | |
token = strtok(NULL, " \t\n"); | |
x = atof(token); | |
token = strtok(NULL, " \t\n"); | |
y = atof(token); | |
token = strtok(NULL, " \t\n"); | |
z = atof(token); | |
init(&puntos[posPuntos], x, y, z); | |
posPuntos++; | |
} | |
} | |
fclose(pf); | |
int done = 0; | |
float ang = 0.0f; | |
while (!done) { | |
SDL_Event event; | |
while (SDL_PollEvent(&event)) { | |
switch (event.type) { | |
case SDL_KEYDOWN: | |
if (event.key.keysym.sym != SDLK_ESCAPE) | |
break; | |
case SDL_QUIT: done = 1; | |
} | |
} | |
glMatrixMode(GL_MODELVIEW); | |
glLoadIdentity(); | |
glTranslatef(0.0f, 0.0f, -0.5f); | |
glRotatef(ang, 1.0f, 1.0f, 0.0f); | |
ang += 0.1f; | |
glClear(GL_COLOR_BUFFER_BIT); //limpia la pantalla | |
//Dibuje el triángulo formado por los vértices [(-1,-1,-2), (1,-1,-2), (0,1,-2)], utilizamos el modo directo que ya esta deprecado | |
glBegin(GL_TRIANGLES); //le decimos que dibujamos triangulos (o guadrilateros, etc etc) | |
for (int i = 0; i < 12; i++) { | |
Vec3* puntoX = &vertices[(int) puntos[i].x - 1]; | |
Vec3* puntoY = &vertices[(int) puntos[i].y - 1]; | |
Vec3* puntoZ = &vertices[(int) puntos[i].z - 1]; | |
glColor3f(1.0f, 0.0f, 0.0f); | |
glVertex3f(puntoX->x, puntoX->y, puntoX->z); | |
glColor3f(0.0f, 1.0f, 0.0f); | |
glVertex3f(puntoY->x, puntoY->y, puntoY->z); | |
glColor3f(0.0f, 0.0f, 1.0f); | |
glVertex3f(puntoZ->x, puntoZ->y, puntoZ->z); | |
} | |
glEnd(); | |
cg_repaint(); | |
} | |
// Liberar recursos: | |
cg_close(); | |
// Ejemplo del modulo de Manejo de Memoria (MM): | |
int* pint = (int *) cg_malloc(10 * sizeof (int)); | |
printf("pint is a pointer: %p\n", pint); | |
cg_free(pint); // olvidarse de liberar este objeto produce un mensaje | |
return 0; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment