CubeMap | Israel González de la Peña
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include <windows.h>
#include <GL/glut.h>
//#include <GLut/gutil.h>
//#include <GLut/glut.h>
//#include <Opengl/gl.h>
//int alto=512,ancho=512;//dim imagen
int alto=200,ancho=200;
GLfloat angle = 0;
GLfloat angle2 = 0;
int moving, startx, starty; // moving=booleana
unsigned char * textura;
unsigned char * textura1;
unsigned char * textura2;
unsigned char * textura3;
unsigned char * textura4;
unsigned char * textura5;
//CARA ARRIBA CIELO
int leerImagen(){
FILE *imagen;
imagen=fopen("C:\\Users\\Imagenes\\CARA-ARRIBA.raw","r");
textura=(unsigned char*)malloc(ancho*alto*3);
if(imagen==NULL){
printf("Error: No imagen");
return 0;
}
fread(textura,ancho*alto*3,1,imagen);
fclose(imagen);
return 1;
}
void usarTextura(void)
{
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, ancho, alto, 0, GL_RGB, GL_UNSIGNED_BYTE, textura);
}
//CARA CENTRO CIELO PASTO
int leerImagen1(){
FILE *imagen1;
imagen1=fopen("C:\\Users\\Imagenes\\CARA-CENTRO.raw","r");
textura1=(unsigned char*)malloc(ancho*alto*3);
if(imagen1==NULL){
printf("Error: No imagen");
return 0;
}
fread(textura1,ancho*alto*3,1,imagen1);
fclose(imagen1);
return 1;
}
void usarTextura1(void)
{
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, ancho, alto, 0, GL_RGB, GL_UNSIGNED_BYTE, textura1);
}
//CARA BASE PASTO
int leerImagen2(){
FILE *imagen2;
imagen2=fopen("C:\\Users\\Imagenes\\CARA-BASE.raw","r");
textura2=(unsigned char*)malloc(ancho*alto*3);
if(imagen2==NULL){
printf("Error: No imagen");
return 0;
}
fread(textura2,ancho*alto*3,1,imagen2);
fclose(imagen2);
return 1;
}
void usarTextura2(void)
{
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, ancho, alto, 0, GL_RGB, GL_UNSIGNED_BYTE, textura2);
}
//CARA NUCLEAR
int leerImagen3(){
FILE *imagen3;
imagen3=fopen("C:\\Users\\Imagenes\\CARA-NUCLEAR.raw","r");
textura3=(unsigned char*)malloc(ancho*alto*3);
if(imagen3==NULL){
printf("Error: No imagen");
return 0;
}
fread(textura3,ancho*alto*3,1,imagen3);
fclose(imagen3);
return 1;
}
void usarTextura3(void)
{
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, ancho, alto, 0, GL_RGB, GL_UNSIGNED_BYTE, textura3);
}
//CARA ESCUELA
int leerImagen4(){
FILE *imagen4;
imagen4=fopen("C:\\Users\\Imagenes\\CARA-ESCUELA.raw","r");
textura4=(unsigned char*)malloc(ancho*alto*3);
if(imagen4==NULL){
printf("Error: No imagen");
return 0;
}
fread(textura4,ancho*alto*3,1,imagen4);
fclose(imagen4);
return 1;
}
void usarTextura4(void)
{
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, ancho, alto, 0, GL_RGB, GL_UNSIGNED_BYTE, textura4);
}
//CARA FINAL
int leerImagen5(){
FILE *imagen5;
imagen5=fopen("C:\\Users\\Imagenes\\CARA-FINAL.raw","r");
textura5=(unsigned char*)malloc(ancho*alto*3);
if(imagen5==NULL){
printf("Error: No imagen");
return 0;
}
fread(textura5,ancho*alto*3,1,imagen5);
fclose(imagen5);
return 1;
}
void usarTextura5(void)
{
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, ancho, alto, 0, GL_RGB, GL_UNSIGNED_BYTE, textura5);
}
// cubemap variables
int d1=10;
int d2=20;
//el origen esta en la base del cubo
static GLint verticesPiso[4][3] = {
{ -d1, 0, -d1 },
{ d1, 0, -d1 },
{ d1, 0, d1 },
{ -d1, 0, d1 },
};
static GLint pared1Vertices[4][3] = {
{ -d1,d2, d1},
{ -d1,0, d1},
{ d1,0, d1},
{ d1,d2, d1},
};
static GLint pared2Vertices[4][3] = {
{ d1,d2, d1},
{ d1,0, d1},
{ d1,0, -d1},
{ d1,d2,-d1},
};
static GLint pared3Vertices[4][3] = {
{ d1,d2,-d1 },
{ d1,0,-d1 },
{ -d1,0,-d1 },
{ -d1,d2,-d1},
};
static GLint pared4Vertices[4][3] = {
{ -d1,d2,-d1},
{ -d1,0,-d1 },
{ -d1,0,d1 },
{ -d1,d2,d1},
};
static GLint techoVertices[4][3] = {
{ d1,d2,-d1},
{ -d1,d2,-d1 },
{ -d1,d2,d1 },
{ d1,d2,d1},
};
void dibujaBase(void)
{
glBegin(GL_QUADS);
glTexCoord2f(0.0, 0.0); // 0 y 1 para pegar la textura
glVertex3iv(verticesPiso[0]);
glTexCoord2f(0.0, 1);
glVertex3iv(verticesPiso[1]);
glTexCoord2f(1, 1);
glVertex3iv(verticesPiso[2]);
glTexCoord2f(1, 0.0);
glVertex3iv(verticesPiso[3]);
glEnd();
leerImagen4();
usarTextura4();
}
void dibujaPared1c(void)
{
glBegin(GL_QUADS);
glTexCoord2f(0.0, 0.0);
glVertex3iv(pared1Vertices[0]);
glTexCoord2f(0.0, 1.0);
glVertex3iv(pared1Vertices[1]);
glTexCoord2f(1.0, 1.0);
glVertex3iv(pared1Vertices[2]);
glTexCoord2f(1.0, 0.0);
glVertex3iv(pared1Vertices[3]);
glEnd();
leerImagen1();
usarTextura1();
}
void dibujaPared2c(void)
{
glBegin(GL_QUADS);
glTexCoord2f(0.0, 0.0);
glVertex3iv(pared2Vertices[0]);
glTexCoord2f(0.0, 1.0);
glVertex3iv(pared2Vertices[1]);
glTexCoord2f(1.0, 1.0);
glVertex3iv(pared2Vertices[2]);
glTexCoord2f(1.0, 0.0);
glVertex3iv(pared2Vertices[3]);
glEnd();
leerImagen3();
usarTextura3();
}
void dibujaPared3c(void)
{
glBegin(GL_QUADS);
glTexCoord2f(0.0, 0.0);
glVertex3iv(pared3Vertices[0]);
glTexCoord2f(0.0, 1.0);
glVertex3iv(pared3Vertices[1]);
glTexCoord2f(1.0, 1.0);
glVertex3iv(pared3Vertices[2]);
glTexCoord2f(1.0, 0.0);
glVertex3iv(pared3Vertices[3]);
glEnd();
leerImagen5();
usarTextura5();
}
void dibujaPared4c(void)
{
glBegin(GL_QUADS);
glTexCoord2f(0.0, 0.0);
glVertex3iv(pared4Vertices[0]);
glTexCoord2f(0.0, 1.0);
glVertex3iv(pared4Vertices[1]);
glTexCoord2f(1.0, 1.0);
glVertex3iv(pared4Vertices[2]);
glTexCoord2f(1.0, 0.0);
glVertex3iv(pared4Vertices[3]);
glEnd();
leerImagen();
usarTextura();
}
void dibujaTapac(void)//techo
{
glBegin(GL_QUADS);
glTexCoord2f(0.0, 0.0);
glVertex3iv(techoVertices[0]);
glTexCoord2f(0.0, 1.0);
glVertex3iv(techoVertices[1]);
glTexCoord2f(1.0, 1.0);
glVertex3iv(techoVertices[2]);
glTexCoord2f(1.0, 0.0);
glVertex3iv(techoVertices[3]);
glEnd();
leerImagen2();
usarTextura2();
}
//////////////////////////////////////////////////
void display(void)
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
glPushMatrix();
glRotatef(angle2, 1.0, 0.0, 0.0); //move mouse
glRotatef(angle, 0.0, 1.0, 0.0);
glPushMatrix();
glTranslatef(0,-10, 0);
dibujaBase();
dibujaPared1c();
dibujaPared2c();
dibujaPared3c();
dibujaPared4c();
dibujaTapac();
glPopMatrix();
glPopMatrix();
glutSwapBuffers();
}
void mouse(int button, int state, int x, int y)
{
if (button == GLUT_LEFT_BUTTON) {
if (state == GLUT_DOWN) {
moving = 1;
startx = x;
starty = y;
}
if (state == GLUT_UP) {
moving = 0;
}
}
}
void mover(int x, int y)
{
if (moving) {
angle = angle + (x - startx);
angle2 = angle2 + (y - starty);
startx = x;
starty = y;
glutPostRedisplay();
}
}
int main(int argc, char **argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH | GLUT_STENCIL | GLUT_MULTISAMPLE);
glutInitWindowSize(640,480);
glutCreateWindow("CUBE MAP");
glutDisplayFunc(display);
glutMouseFunc(mouse);
glutMotionFunc(mover);
gluPerspective(40.0,1.333,0.1,200.0); //16/10=1.6 5/4=1.25
glMatrixMode(GL_MODELVIEW);
gluLookAt(0.0, 0.0, 10.0, /* camara en (0,20,60) */
0,0,0, /* mira a (x,y,z) */
0, 1, 0); /* altura en Y (0,1,0) o en x Y (1,0,0) */
//leerImagen();
//usarTextura();
glEnable(GL_TEXTURE_2D);
glEnable(GL_DEPTH_TEST);
glutMainLoop();
return 0;
}
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include <windows.h>
#include <GL/glut.h>
//#include <GLut/gutil.h>
//#include <GLut/glut.h>
//#include <Opengl/gl.h>
//int alto=512,ancho=512;//dim imagen
int alto=200,ancho=200;
GLfloat angle = 0;
GLfloat angle2 = 0;
int moving, startx, starty; // moving=booleana
unsigned char * textura;
unsigned char * textura1;
unsigned char * textura2;
unsigned char * textura3;
unsigned char * textura4;
unsigned char * textura5;
//CARA ARRIBA CIELO
int leerImagen(){
FILE *imagen;
imagen=fopen("C:\\Users\\Imagenes\\CARA-ARRIBA.raw","r");
textura=(unsigned char*)malloc(ancho*alto*3);
if(imagen==NULL){
printf("Error: No imagen");
return 0;
}
fread(textura,ancho*alto*3,1,imagen);
fclose(imagen);
return 1;
}
void usarTextura(void)
{
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, ancho, alto, 0, GL_RGB, GL_UNSIGNED_BYTE, textura);
}
//CARA CENTRO CIELO PASTO
int leerImagen1(){
FILE *imagen1;
imagen1=fopen("C:\\Users\\Imagenes\\CARA-CENTRO.raw","r");
textura1=(unsigned char*)malloc(ancho*alto*3);
if(imagen1==NULL){
printf("Error: No imagen");
return 0;
}
fread(textura1,ancho*alto*3,1,imagen1);
fclose(imagen1);
return 1;
}
void usarTextura1(void)
{
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, ancho, alto, 0, GL_RGB, GL_UNSIGNED_BYTE, textura1);
}
//CARA BASE PASTO
int leerImagen2(){
FILE *imagen2;
imagen2=fopen("C:\\Users\\Imagenes\\CARA-BASE.raw","r");
textura2=(unsigned char*)malloc(ancho*alto*3);
if(imagen2==NULL){
printf("Error: No imagen");
return 0;
}
fread(textura2,ancho*alto*3,1,imagen2);
fclose(imagen2);
return 1;
}
void usarTextura2(void)
{
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, ancho, alto, 0, GL_RGB, GL_UNSIGNED_BYTE, textura2);
}
//CARA NUCLEAR
int leerImagen3(){
FILE *imagen3;
imagen3=fopen("C:\\Users\\Imagenes\\CARA-NUCLEAR.raw","r");
textura3=(unsigned char*)malloc(ancho*alto*3);
if(imagen3==NULL){
printf("Error: No imagen");
return 0;
}
fread(textura3,ancho*alto*3,1,imagen3);
fclose(imagen3);
return 1;
}
void usarTextura3(void)
{
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, ancho, alto, 0, GL_RGB, GL_UNSIGNED_BYTE, textura3);
}
//CARA ESCUELA
int leerImagen4(){
FILE *imagen4;
imagen4=fopen("C:\\Users\\Imagenes\\CARA-ESCUELA.raw","r");
textura4=(unsigned char*)malloc(ancho*alto*3);
if(imagen4==NULL){
printf("Error: No imagen");
return 0;
}
fread(textura4,ancho*alto*3,1,imagen4);
fclose(imagen4);
return 1;
}
void usarTextura4(void)
{
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, ancho, alto, 0, GL_RGB, GL_UNSIGNED_BYTE, textura4);
}
//CARA FINAL
int leerImagen5(){
FILE *imagen5;
imagen5=fopen("C:\\Users\\Imagenes\\CARA-FINAL.raw","r");
textura5=(unsigned char*)malloc(ancho*alto*3);
if(imagen5==NULL){
printf("Error: No imagen");
return 0;
}
fread(textura5,ancho*alto*3,1,imagen5);
fclose(imagen5);
return 1;
}
void usarTextura5(void)
{
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, ancho, alto, 0, GL_RGB, GL_UNSIGNED_BYTE, textura5);
}
// cubemap variables
int d1=10;
int d2=20;
//el origen esta en la base del cubo
static GLint verticesPiso[4][3] = {
{ -d1, 0, -d1 },
{ d1, 0, -d1 },
{ d1, 0, d1 },
{ -d1, 0, d1 },
};
static GLint pared1Vertices[4][3] = {
{ -d1,d2, d1},
{ -d1,0, d1},
{ d1,0, d1},
{ d1,d2, d1},
};
static GLint pared2Vertices[4][3] = {
{ d1,d2, d1},
{ d1,0, d1},
{ d1,0, -d1},
{ d1,d2,-d1},
};
static GLint pared3Vertices[4][3] = {
{ d1,d2,-d1 },
{ d1,0,-d1 },
{ -d1,0,-d1 },
{ -d1,d2,-d1},
};
static GLint pared4Vertices[4][3] = {
{ -d1,d2,-d1},
{ -d1,0,-d1 },
{ -d1,0,d1 },
{ -d1,d2,d1},
};
static GLint techoVertices[4][3] = {
{ d1,d2,-d1},
{ -d1,d2,-d1 },
{ -d1,d2,d1 },
{ d1,d2,d1},
};
void dibujaBase(void)
{
glBegin(GL_QUADS);
glTexCoord2f(0.0, 0.0); // 0 y 1 para pegar la textura
glVertex3iv(verticesPiso[0]);
glTexCoord2f(0.0, 1);
glVertex3iv(verticesPiso[1]);
glTexCoord2f(1, 1);
glVertex3iv(verticesPiso[2]);
glTexCoord2f(1, 0.0);
glVertex3iv(verticesPiso[3]);
glEnd();
leerImagen4();
usarTextura4();
}
void dibujaPared1c(void)
{
glBegin(GL_QUADS);
glTexCoord2f(0.0, 0.0);
glVertex3iv(pared1Vertices[0]);
glTexCoord2f(0.0, 1.0);
glVertex3iv(pared1Vertices[1]);
glTexCoord2f(1.0, 1.0);
glVertex3iv(pared1Vertices[2]);
glTexCoord2f(1.0, 0.0);
glVertex3iv(pared1Vertices[3]);
glEnd();
leerImagen1();
usarTextura1();
}
void dibujaPared2c(void)
{
glBegin(GL_QUADS);
glTexCoord2f(0.0, 0.0);
glVertex3iv(pared2Vertices[0]);
glTexCoord2f(0.0, 1.0);
glVertex3iv(pared2Vertices[1]);
glTexCoord2f(1.0, 1.0);
glVertex3iv(pared2Vertices[2]);
glTexCoord2f(1.0, 0.0);
glVertex3iv(pared2Vertices[3]);
glEnd();
leerImagen3();
usarTextura3();
}
void dibujaPared3c(void)
{
glBegin(GL_QUADS);
glTexCoord2f(0.0, 0.0);
glVertex3iv(pared3Vertices[0]);
glTexCoord2f(0.0, 1.0);
glVertex3iv(pared3Vertices[1]);
glTexCoord2f(1.0, 1.0);
glVertex3iv(pared3Vertices[2]);
glTexCoord2f(1.0, 0.0);
glVertex3iv(pared3Vertices[3]);
glEnd();
leerImagen5();
usarTextura5();
}
void dibujaPared4c(void)
{
glBegin(GL_QUADS);
glTexCoord2f(0.0, 0.0);
glVertex3iv(pared4Vertices[0]);
glTexCoord2f(0.0, 1.0);
glVertex3iv(pared4Vertices[1]);
glTexCoord2f(1.0, 1.0);
glVertex3iv(pared4Vertices[2]);
glTexCoord2f(1.0, 0.0);
glVertex3iv(pared4Vertices[3]);
glEnd();
leerImagen();
usarTextura();
}
void dibujaTapac(void)//techo
{
glBegin(GL_QUADS);
glTexCoord2f(0.0, 0.0);
glVertex3iv(techoVertices[0]);
glTexCoord2f(0.0, 1.0);
glVertex3iv(techoVertices[1]);
glTexCoord2f(1.0, 1.0);
glVertex3iv(techoVertices[2]);
glTexCoord2f(1.0, 0.0);
glVertex3iv(techoVertices[3]);
glEnd();
leerImagen2();
usarTextura2();
}
//////////////////////////////////////////////////
void display(void)
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
glPushMatrix();
glRotatef(angle2, 1.0, 0.0, 0.0); //move mouse
glRotatef(angle, 0.0, 1.0, 0.0);
glPushMatrix();
glTranslatef(0,-10, 0);
dibujaBase();
dibujaPared1c();
dibujaPared2c();
dibujaPared3c();
dibujaPared4c();
dibujaTapac();
glPopMatrix();
glPopMatrix();
glutSwapBuffers();
}
void mouse(int button, int state, int x, int y)
{
if (button == GLUT_LEFT_BUTTON) {
if (state == GLUT_DOWN) {
moving = 1;
startx = x;
starty = y;
}
if (state == GLUT_UP) {
moving = 0;
}
}
}
void mover(int x, int y)
{
if (moving) {
angle = angle + (x - startx);
angle2 = angle2 + (y - starty);
startx = x;
starty = y;
glutPostRedisplay();
}
}
int main(int argc, char **argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH | GLUT_STENCIL | GLUT_MULTISAMPLE);
glutInitWindowSize(640,480);
glutCreateWindow("CUBE MAP");
glutDisplayFunc(display);
glutMouseFunc(mouse);
glutMotionFunc(mover);
gluPerspective(40.0,1.333,0.1,200.0); //16/10=1.6 5/4=1.25
glMatrixMode(GL_MODELVIEW);
gluLookAt(0.0, 0.0, 10.0, /* camara en (0,20,60) */
0,0,0, /* mira a (x,y,z) */
0, 1, 0); /* altura en Y (0,1,0) o en x Y (1,0,0) */
//leerImagen();
//usarTextura();
glEnable(GL_TEXTURE_2D);
glEnable(GL_DEPTH_TEST);
glutMainLoop();
return 0;
}
Comentarios
Publicar un comentario