Skip to content

Instantly share code, notes, and snippets.

@agustinsivoplas
Created September 5, 2015 17:19
Show Gist options
  • Save agustinsivoplas/886b4cc0326c5ab71170 to your computer and use it in GitHub Desktop.
Save agustinsivoplas/886b4cc0326c5ab71170 to your computer and use it in GitHub Desktop.
main c box
#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