Download as txt, pdf, or txt
Download as txt, pdf, or txt
You are on page 1of 12

import java.awt.event.

KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;

import javax.swing.JFrame;

import com.jogamp.opengl.GL;
import com.jogamp.opengl.GL2;
import com.jogamp.opengl.GLAutoDrawable;
import com.jogamp.opengl.GLEventListener;
import com.jogamp.opengl.awt.GLCanvas;
import com.jogamp.opengl.util.FPSAnimator;
import com.jogamp.opengl.util.texture.Texture;
import com.jogamp.opengl.util.texture.TextureIO;
import java.io.File;
import java.io.IOException;

public class Principal extends JFrame implements GLEventListener, KeyListener,


MouseMotionListener {
private static final int WIDTH = 800;
private static final int HEIGHT = 600;
private static final float MOVE_SPEED = 0.1f;
private static final float MOUSE_SENSITIVITY = 0.1f;

private float cameraX;


private float cameraY;
private float cameraZ;
private float cameraYaw;
private int prevMouseX;
private int prevMouseY;
private float cameraPitch;
private float maxPitch;
private boolean forwardPressed;
private boolean backwardPressed;
private boolean leftPressed;
private boolean rightPressed;

public static void main(String[] args) {


Principal room = new Principal();
room.run();
}

public Principal() {
super("Facultad");
GLCanvas canvas = new GLCanvas();
canvas.addGLEventListener(this);
canvas.addKeyListener(this);
canvas.addMouseMotionListener(this);
getContentPane().add(canvas);
setSize(WIDTH, HEIGHT);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);

FPSAnimator animator = new FPSAnimator(canvas, 60);


animator.start();
}

private void run() {


cameraX = 0.0f;
cameraY = 0.0f;
cameraZ = 0.0f;
cameraYaw = 0.0f;
prevMouseX = 0;
cameraPitch = 0.0f;
maxPitch = 90.0f;

@Override
public void init(GLAutoDrawable drawable) {
GL2 gl = drawable.getGL().getGL2();
gl.glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
gl.glEnable(GL.GL_DEPTH_TEST);

gl.glMatrixMode(GL2.GL_PROJECTION);
gl.glLoadIdentity();
gl.glFrustum(-1.0, 1.0, -1.0, 1.0, 1.0, 100.0);

gl.glMatrixMode(GL2.GL_MODELVIEW);
gl.glLoadIdentity();
}

@Override
public void display(GLAutoDrawable drawable) {
GL2 gl = drawable.getGL().getGL2();
gl.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT);
gl.glLoadIdentity();

gl.glTranslatef(0.0f, 0.0f, -10.0f);

gl.glRotatef(cameraYaw, 0.0f, 1.0f, 0.0f);


gl.glTranslatef(-cameraX, -cameraY, -cameraZ);

updateCameraPosition(); // Actualizar la posición de la cámara

drawRoom(gl);
drawSecondRoom(gl);
drawThirdRoom(gl);
}

private void drawRoom(GL2 gl) {

Texture texture;
try {

texture = TextureIO.newTexture(new File("images/piso1.jpg"), true);


} catch (IOException e) {
e.printStackTrace();
return;
}

gl.glEnable(GL2.GL_TEXTURE_2D);
gl.glTexEnvf(GL2.GL_TEXTURE_ENV, GL2.GL_TEXTURE_ENV_MODE, GL2.GL_MODULATE);
texture.bind(gl);
gl.glBegin(GL2.GL_QUADS);
gl.glColor3f(1.0f, 1.0f, 1.0f);
gl.glTexCoord2f(0.0f, 0.0f);
gl.glVertex3f(-5.0f, -1.0f, -5.0f);
gl.glTexCoord2f(0.0f, 1.0f);
gl.glVertex3f(-5.0f, -1.0f, 5.0f);
gl.glTexCoord2f(1.0f, 1.0f);
gl.glVertex3f(5.0f, -1.0f, 5.0f);
gl.glTexCoord2f(1.0f, 0.0f);
gl.glVertex3f(5.0f, -1.0f, -5.0f);
gl.glEnd();

gl.glDisable(GL2.GL_TEXTURE_2D);

Texture texture1;
try {
texture1 = TextureIO.newTexture(new File("images/frontal1.jpg"), true);
} catch (IOException e) {
e.printStackTrace();
return;
}

// Pared frontal
gl.glEnable(GL2.GL_TEXTURE_2D);
texture1.bind(gl);
gl.glBegin(GL2.GL_QUADS);
gl.glColor3f(1.0f, 1.0f, 1.0f);
gl.glTexCoord2f(0.0f, 0.0f);
gl.glVertex3f(-5.0f, -1.0f, -5.0f);
gl.glTexCoord2f(0.0f, 1.0f);
gl.glVertex3f(-5.0f, 5.0f, -5.0f);
gl.glTexCoord2f(1.0f, 1.0f);
gl.glVertex3f(5.0f, 5.0f, -5.0f);
gl.glTexCoord2f(1.0f, 0.0f);
gl.glVertex3f(5.0f, -1.0f, -5.0f);
gl.glEnd();
gl.glDisable(GL2.GL_TEXTURE_2D);

// Cargar la textura
Texture textureLeftFloor = null;
try {
textureLeftFloor = TextureIO.newTexture(new File("images/piso1.jpg"),
true);
} catch (IOException e) {
e.printStackTrace();
}

// Verificar si la textura se cargó correctamente


if (textureLeftFloor != null) {
// Habilitar el uso de texturas en OpenGL
gl.glEnable(GL2.GL_TEXTURE_2D);

// Vincular la textura antes de dibujar el piso izquierdo


textureLeftFloor.bind(gl);
// Dibujar el piso izquierdo con la textura
gl.glBegin(GL2.GL_QUADS);
gl.glColor3f(1.0f, 1.0f, 1.0f);
gl.glTexCoord2f(0.0f, 0.0f);
gl.glVertex3f(-5.0f, -1.0f, -5.0f);
gl.glTexCoord2f(0.0f, 1.0f);
gl.glVertex3f(-5.0f, -1.0f, 5.0f);
gl.glTexCoord2f(1.0f, 1.0f);
gl.glVertex3f(-15.0f, -1.0f, 5.0f);
gl.glTexCoord2f(1.0f, 0.0f);
gl.glVertex3f(-15.0f, -1.0f, -5.0f);
gl.glEnd();

// Deshabilitar el uso de texturas después de dibujar


gl.glDisable(GL2.GL_TEXTURE_2D);
}

Texture texture2;
try {
texture2 = TextureIO.newTexture(new File("images/izqui1.jpg"), true);
} catch (IOException e) {
e.printStackTrace();
return;
}

// Pared izquierda del piso


gl.glEnable(GL2.GL_TEXTURE_2D);
texture2.bind(gl);
gl.glBegin(GL2.GL_QUADS);
gl.glColor3f(1.0f, 1.0f, 1.0f);
gl.glTexCoord2f(0.0f, 0.0f);
gl.glVertex3f(-15.0f, -1.0f, -5.0f);
gl.glTexCoord2f(0.0f, 1.0f);
gl.glVertex3f(-15.0f, -1.0f, 5.0f);
gl.glTexCoord2f(1.0f, 1.0f);
gl.glVertex3f(-15.0f, 5.0f, 5.0f);
gl.glTexCoord2f(1.0f, 0.0f);
gl.glVertex3f(-15.0f, 5.0f, -5.0f);
gl.glEnd();
gl.glDisable(GL2.GL_TEXTURE_2D);

Texture texture3;
try {
texture3 = TextureIO.newTexture(new File("images/derecha1.jpg"), true);
} catch (IOException e) {
e.printStackTrace();
return;
}

// Pared frontal del piso en la parte de atrás


gl.glEnable(GL2.GL_TEXTURE_2D);
texture3.bind(gl);
gl.glBegin(GL2.GL_QUADS);
gl.glColor3f(1.0f, 1.0f, 1.0f);
gl.glTexCoord2f(0.0f, 0.0f);
gl.glVertex3f(-5.0f, -1.0f, -5.0f);
gl.glTexCoord2f(0.0f, 1.0f);
gl.glVertex3f(-5.0f, 5.0f, -5.0f);
gl.glTexCoord2f(1.0f, 1.0f);
gl.glVertex3f(-15.0f, 5.0f, -5.0f);
gl.glTexCoord2f(1.0f, 0.0f);
gl.glVertex3f(-15.0f, -1.0f, -5.0f);
gl.glEnd();
gl.glDisable(GL2.GL_TEXTURE_2D);

Texture texture4;
try {
texture4 = TextureIO.newTexture(new File("images/dere.jpg"), true);
} catch (IOException e) {
e.printStackTrace();
return;
}

// Pared derecha
gl.glEnable(GL2.GL_TEXTURE_2D);
texture4.bind(gl);
gl.glBegin(GL2.GL_QUADS);
gl.glColor3f(1.0f, 1.0f, 1.0f);
gl.glTexCoord2f(0.0f, 0.0f);
gl.glVertex3f(5.0f, -1.0f, -5.0f);
gl.glTexCoord2f(0.0f, 1.0f);
gl.glVertex3f(5.0f, 5.0f, -5.0f);
gl.glTexCoord2f(1.0f, 1.0f);
gl.glVertex3f(5.0f, 5.0f, 5.0f);
gl.glTexCoord2f(1.0f, 0.0f);
gl.glVertex3f(5.0f, -1.0f, 5.0f);
gl.glEnd();
gl.glDisable(GL2.GL_TEXTURE_2D);

private void drawSecondRoom(GL2 gl) {

Texture texture5;
try {
texture5 = TextureIO.newTexture(new File("images/piso1.jpg"), true);
} catch (IOException e) {
e.printStackTrace();
return;
}

// Piso del segundo dormitorio


gl.glEnable(GL2.GL_TEXTURE_2D);
texture5.bind(gl);
gl.glBegin(GL2.GL_QUADS);
gl.glColor3f(1.0f, 1.0f, 1.0f);
gl.glTexCoord2f(0.0f, 0.0f);
gl.glVertex3f(-5.0f, -1.0f, 5.0f);
gl.glTexCoord2f(0.0f, 1.0f);
gl.glVertex3f(-5.0f, -1.0f, 15.0f);
gl.glTexCoord2f(1.0f, 1.0f);
gl.glVertex3f(5.0f, -1.0f, 15.0f);
gl.glTexCoord2f(1.0f, 0.0f);
gl.glVertex3f(5.0f, -1.0f, 5.0f);
gl.glEnd();
gl.glDisable(GL2.GL_TEXTURE_2D);

Texture texture6;
try {
texture6 = TextureIO.newTexture(new File("images/paredizquierda2.png"),
true);
} catch (IOException e) {
e.printStackTrace();
return;
}

// Pared izquierda del segundo dormitorio


gl.glEnable(GL2.GL_TEXTURE_2D);
texture6.bind(gl);
gl.glBegin(GL2.GL_QUADS);
gl.glColor3f(1.0f, 1.0f, 1.0f);
gl.glTexCoord2f(0.0f, 0.0f);
gl.glVertex3f(-5.0f, -1.0f, 5.0f);
gl.glTexCoord2f(0.0f, 1.0f);
gl.glVertex3f(-5.0f, 5.0f, 5.0f);
gl.glTexCoord2f(1.0f, 1.0f);
gl.glVertex3f(-5.0f, 5.0f, 15.0f);
gl.glTexCoord2f(1.0f, 0.0f);
gl.glVertex3f(-5.0f, -1.0f, 15.0f);
gl.glEnd();
gl.glDisable(GL2.GL_TEXTURE_2D);

Texture texture7;
try {
texture7 = TextureIO.newTexture(new File("images/paredderecha2.png"),
true);
} catch (IOException e) {
e.printStackTrace();
return;
}

// Pared derecha del segundo dormitorio


gl.glEnable(GL2.GL_TEXTURE_2D);
texture7.bind(gl);
gl.glBegin(GL2.GL_QUADS);
gl.glColor3f(1.0f, 1.0f, 1.0f);
gl.glTexCoord2f(0.0f, 0.0f);
gl.glVertex3f(5.0f, -1.0f, 5.0f);
gl.glTexCoord2f(0.0f, 1.0f);
gl.glVertex3f(5.0f, 5.0f, 5.0f);
gl.glTexCoord2f(1.0f, 1.0f);
gl.glVertex3f(5.0f, 5.0f, 15.0f);
gl.glTexCoord2f(1.0f, 0.0f);
gl.glVertex3f(5.0f, -1.0f, 15.0f);
gl.glEnd();
gl.glDisable(GL2.GL_TEXTURE_2D);

private void drawThirdRoom(GL2 gl) {

Texture texture8;
try {
texture8 = TextureIO.newTexture(new File("images/piso1.jpg"), true);
} catch (IOException e) {
e.printStackTrace();
return;
}

// Piso del tercer dormitorio


gl.glEnable(GL2.GL_TEXTURE_2D);
texture8.bind(gl);
gl.glBegin(GL2.GL_QUADS);
gl.glColor3f(1.0f, 1.0f, 1.0f);
gl.glTexCoord2f(0.0f, 0.0f);
gl.glVertex3f(-5.0f, -1.0f, 15.0f);
gl.glTexCoord2f(0.0f, 1.0f);
gl.glVertex3f(-15.0f, -1.0f, 15.0f);
gl.glTexCoord2f(1.0f, 1.0f);
gl.glVertex3f(-15.0f, -1.0f, 5.0f);
gl.glTexCoord2f(1.0f, 0.0f);
gl.glVertex3f(-5.0f, -1.0f, 5.0f);
gl.glEnd();
gl.glDisable(GL2.GL_TEXTURE_2D);

Texture texture9;
try {
texture9 = TextureIO.newTexture(new File("images/pisos.png"), true);
} catch (IOException e) {
e.printStackTrace();
return;
}

// Piso adicional en la parte derecha del piso del tercer dormitorio


gl.glEnable(GL2.GL_TEXTURE_2D);
texture9.bind(gl);
gl.glBegin(GL2.GL_QUADS);
gl.glColor3f(1.0f, 1.0f, 1.0f);
gl.glTexCoord2f(0.0f, 0.0f);
gl.glVertex3f(-15.0f, -1.0f, 15.0f);
gl.glTexCoord2f(0.0f, 1.0f);
gl.glVertex3f(-25.0f, -1.0f, 15.0f);
gl.glTexCoord2f(1.0f, 1.0f);
gl.glVertex3f(-25.0f, -1.0f, 5.0f);
gl.glTexCoord2f(1.0f, 0.0f);
gl.glVertex3f(-15.0f, -1.0f, 5.0f);
gl.glEnd();
gl.glDisable(GL2.GL_TEXTURE_2D);

Texture texture10;
try {
texture10 = TextureIO.newTexture(new File("images/venta.jpg"), true);
} catch (IOException e) {
e.printStackTrace();
return;
}

// Pared frontal izquierda del piso adicional


gl.glEnable(GL2.GL_TEXTURE_2D);
texture10.bind(gl);
gl.glBegin(GL2.GL_QUADS);
gl.glColor3f(1.0f, 1.0f, 1.0f);
gl.glTexCoord2f(0.0f, 0.0f);
gl.glVertex3f(-15.0f, -1.0f, 15.0f);
gl.glTexCoord2f(0.0f, 1.0f);
gl.glVertex3f(-15.0f, 5.0f, 15.0f);
gl.glTexCoord2f(1.0f, 1.0f);
gl.glVertex3f(-25.0f, 5.0f, 15.0f);
gl.glTexCoord2f(1.0f, 0.0f);
gl.glVertex3f(-25.0f, -1.0f, 15.0f);
gl.glEnd();
gl.glDisable(GL2.GL_TEXTURE_2D);

Texture texture11;
try {
texture11 = TextureIO.newTexture(new File("images/venta2.jpg"), true);
} catch (IOException e) {
e.printStackTrace();
return;
}

// Pared frontal derecha del piso adicional


gl.glEnable(GL2.GL_TEXTURE_2D);
texture11.bind(gl);
gl.glBegin(GL2.GL_QUADS);
gl.glColor3f(1.0f, 1.0f, 1.0f);
gl.glTexCoord2f(0.0f, 0.0f);
gl.glVertex3f(-15.0f, -1.0f, 5.0f);
gl.glTexCoord2f(0.0f, 1.0f);
gl.glVertex3f(-15.0f, 5.0f, 5.0f);
gl.glTexCoord2f(1.0f, 1.0f);
gl.glVertex3f(-25.0f, 5.0f, 5.0f);
gl.glTexCoord2f(1.0f, 0.0f);
gl.glVertex3f(-25.0f, -1.0f, 5.0f);
gl.glEnd();
gl.glDisable(GL2.GL_TEXTURE_2D);

Texture texture12;
try {
texture12 = TextureIO.newTexture(new File("images/frontal5.jpg"), true);
} catch (IOException e) {
e.printStackTrace();
return;
}

// Pared derecha de la pared frontal derecha del piso adicional


gl.glEnable(GL2.GL_TEXTURE_2D);
texture12.bind(gl);
gl.glBegin(GL2.GL_QUADS);
gl.glColor3f(1.0f, 1.0f, 1.0f);
gl.glTexCoord2f(0.0f, 0.0f);
gl.glVertex3f(-25.0f, -1.0f, 5.0f);
gl.glTexCoord2f(0.0f, 1.0f);
gl.glVertex3f(-25.0f, 5.0f, 5.0f);
gl.glTexCoord2f(1.0f, 1.0f);
gl.glVertex3f(-25.0f, 5.0f, 15.0f);
gl.glTexCoord2f(1.0f, 0.0f);
gl.glVertex3f(-25.0f, -1.0f, 15.0f);
gl.glEnd();
gl.glDisable(GL2.GL_TEXTURE_2D);

Texture texture13;
try {
texture13 = TextureIO.newTexture(new File("images/froniz.jpg"), true);
} catch (IOException e) {
e.printStackTrace();
return;
}

// Pared frontal del tercer dormitorio


gl.glEnable(GL2.GL_TEXTURE_2D);
texture13.bind(gl);
gl.glBegin(GL2.GL_QUADS);
gl.glColor3f(1.0f, 1.0f, 1.0f);
gl.glTexCoord2f(0.0f, 0.0f);
gl.glVertex3f(-5.0f, -1.0f, 15.0f);
gl.glTexCoord2f(0.0f, 1.0f);
gl.glVertex3f(-5.0f, 5.0f, 15.0f);
gl.glTexCoord2f(1.0f, 1.0f);
gl.glVertex3f(-15.0f, 5.0f, 15.0f);
gl.glTexCoord2f(1.0f, 0.0f);
gl.glVertex3f(-15.0f, -1.0f, 15.0f);
gl.glEnd();
gl.glDisable(GL2.GL_TEXTURE_2D);

@Override
public void keyTyped(KeyEvent e) {
// Implementa el código necesario aquí
}

@Override
public void reshape(GLAutoDrawable drawable, int x, int y, int width, int
height) {
GL2 gl = drawable.getGL().getGL2();
gl.glViewport(0, 0, width, height);
}

@Override
public void dispose(GLAutoDrawable drawable) {

private void updateCameraPosition() {


float moveSpeed = MOVE_SPEED;

if (forwardPressed) {
cameraX += moveSpeed * Math.sin(Math.toRadians(cameraYaw));
cameraZ -= moveSpeed * Math.cos(Math.toRadians(cameraYaw));
}
if (backwardPressed) {
cameraX -= moveSpeed * Math.sin(Math.toRadians(cameraYaw));
cameraZ += moveSpeed * Math.cos(Math.toRadians(cameraYaw));
}
if (leftPressed) {
cameraX += moveSpeed * Math.sin(Math.toRadians(cameraYaw - 90));
cameraZ -= moveSpeed * Math.cos(Math.toRadians(cameraYaw - 90));
}
if (rightPressed) {
cameraX += moveSpeed * Math.sin(Math.toRadians(cameraYaw + 90));
cameraZ -= moveSpeed * Math.cos(Math.toRadians(cameraYaw + 90));
}
}

@Override
public void keyPressed(KeyEvent e) {
int key = e.getKeyCode();

if (key == KeyEvent.VK_W) {
forwardPressed = true;
} else if (key == KeyEvent.VK_S) {
backwardPressed = true;
} else if (key == KeyEvent.VK_A) {
leftPressed = true;
} else if (key == KeyEvent.VK_D) {
rightPressed = true;
}
}

@Override
public void keyReleased(KeyEvent e) {
int key = e.getKeyCode();

if (key == KeyEvent.VK_W) {
forwardPressed = false;
} else if (key == KeyEvent.VK_S) {
backwardPressed = false;
} else if (key == KeyEvent.VK_A) {
leftPressed = false;
} else if (key == KeyEvent.VK_D) {
rightPressed = false;
}
}

// @Override
// public void keyPressed(KeyEvent e) {
// int keyCode = e.getKeyCode();
// switch (keyCode) {
// case KeyEvent.VK_S:
// forwardPressed = true;
// break;
// case KeyEvent.VK_W:
// backwardPressed = true;
// break;
// case KeyEvent.VK_A:
// leftPressed = true;
// break;
// case KeyEvent.VK_D:
// rightPressed = true;
// break;
// }
// }

// @Override
// public void keyTyped(KeyEvent e) {
//
// }

// @Override
// public void keyReleased(KeyEvent e) {
// int keyCode = e.getKeyCode();
// switch (keyCode) {
// case KeyEvent.VK_S:
// forwardPressed = false;
// break;
// case KeyEvent.VK_W:
// backwardPressed = false;
// break;
// case KeyEvent.VK_A:
// leftPressed = false;
// break;
// case KeyEvent.VK_D:
// rightPressed = false;
// break;
// }
// }
// private void updateCameraPosition() {
// if (forwardPressed) {
// moveForward();
// }
// if (backwardPressed) {
// moveBackward();
// }
// if (leftPressed) {
// strafeLeft();
// }
// if (rightPressed) {
// strafeRight();
// }
// }

@Override
public void mouseDragged(MouseEvent e) {
int mouseX = e.getX();
int mouseY = e.getY();

int deltaX = mouseX - prevMouseX;


int deltaY = mouseY - prevMouseY;

cameraYaw += deltaX * MOUSE_SENSITIVITY;


cameraPitch += deltaY * MOUSE_SENSITIVITY;

// Limitar el ángulo de pitch dentro del rango permitido


if (cameraPitch > maxPitch) {
cameraPitch = maxPitch;
} else if (cameraPitch < -maxPitch) {
cameraPitch = -maxPitch;
}

prevMouseX = mouseX;
prevMouseY = mouseY;
}

@Override
public void mouseMoved(MouseEvent e) {
prevMouseX = e.getX();
prevMouseY = e.getY();
}

private void moveForward() {


cameraX -= MOVE_SPEED * Math.sin(Math.toRadians(cameraYaw));
cameraZ += MOVE_SPEED * Math.cos(Math.toRadians(cameraYaw));
}

private void moveBackward() {


cameraX += MOVE_SPEED * Math.sin(Math.toRadians(cameraYaw));
cameraZ -= MOVE_SPEED * Math.cos(Math.toRadians(cameraYaw));
}

private void strafeLeft() {


cameraX -= MOVE_SPEED * Math.cos(Math.toRadians(cameraYaw));
cameraZ -= MOVE_SPEED * Math.sin(Math.toRadians(cameraYaw));
}

private void strafeRight() {


cameraX += MOVE_SPEED * Math.cos(Math.toRadians(cameraYaw));
cameraZ += MOVE_SPEED * Math.sin(Math.toRadians(cameraYaw));
}
}

You might also like