package org.engine;
import org.lwjgl.LWJGLException;
import org.lwjgl.opengl.Display;
import org.lwjgl.opengl.DisplayMode;
import org.lwjgl.opengl.GL11;
import org.lwjgl.util.glu.GLU;
import org.newdawn.slick.opengl.Texture;
import org.newdawn.slick.opengl.TextureLoader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
public class GLEngine {
private int width; // ширина окна
private int height; // высота окна
private String title; // заголовок окна
private Texture texture;
private int rotate = 1;
private float rotateX = 0.0f;
private void loadTexture() {
}
public GLEngine(String title, int width, int height, int x, int y) throws FileNotFoundException, IOException { // конструктор класса
this.width = width;
this.height = height;
this.title = title;
this.x = x;
this.y = y;
texture = TextureLoader.getTexture("JPG", new FileInputStream(new File("/Users/nikita/IdeaProjects/OpenGLLab1/stones.jpg")));
}
private void initGL() throws LWJGLException {
Display.setDisplayMode(new DisplayMode(width, height)); // задаём размер экрана
Display.setTitle(title); // задаём заголовок экрана
Display.create(); // создаём окно с заданным форматом пикселей
GL11.glClearColor(0.0f, 0.0f, 0.0f, 0.0f); // This Will Clear The Background Color To Black
GL11.glClearDepth(1.0); // Enables Clearing Of The Depth Buffer
GL11.glDepthFunc(GL11.GL_LESS); // The Type Of Depth Test To Do
GL11.glEnable(GL11.GL_DEPTH_TEST); // Enables Depth Testing
GL11.glShadeModel(GL11.GL_SMOOTH); // Enables Smooth Color Shading
GL11.glMatrixMode(GL11.GL_PROJECTION);
GL11.glLoadIdentity(); // Reset The Projection Matrix
GLU.gluPerspective(45.0f, (float) width / (float) height, 0.1f, 100.0f);
GL11.glMatrixMode(GL11.GL_MODELVIEW);
}
public void start() throws LWJGLException {
initGL();
while (!Display.isCloseRequested()) { // пока окно не закрыто
render(); // рисуем
Display.update(); // обновляем экран
Display.sync(60);
}
Display.destroy(); // уничтожаем окно
}
public void render() {
GL11.glClear(GL11.GL_COLOR_BUFFER_BIT | GL11.GL_DEPTH_BUFFER_BIT); // устанавливаем буферизацию для окна
GL11.glLoadIdentity(); // Reset The View
GL11.glTranslatef(0f, 0.0f, -8f);
GL11.glRotatef(rotateX, -5.0f, 1.0f, 0.0f);
GL11.glColor3f(0.5f, 0.5f, 1.0f);
GL11.glBegin(GL11.GL_QUADS);
GL11.glColor3f(1.0f, 1.0f, 0.0f);
GL11.glVertex3f(1.0f, 1.0f, -1.0f);
GL11.glVertex3f(-1.0f, 1.0f, -1.0f);
GL11.glVertex3f(-1.0f, 1.0f, 1.0f);
GL11.glVertex3f(1.0f, 1.0f, 1.0f);
GL11.glColor3f(1.0f, 0.5f, 0.0f);
GL11.glVertex3f(1.0f, -1.0f, 1.0f);
GL11.glVertex3f(-1.0f, -1.0f, 1.0f);
GL11.glVertex3f(-1.0f, -1.0f, -1.0f);
GL11.glVertex3f(1.0f, -1.0f, -1.0f);
GL11.glColor3f(1.0f, 0.0f, 0.0f);
GL11.glVertex3f(1.0f, 1.0f, 1.0f);
GL11.glVertex3f(-1.0f, 1.0f, 1.0f);
GL11.glVertex3f(-1.0f, -1.0f, 1.0f);
GL11.glVertex3f(1.0f, -1.0f, 1.0f);
GL11.glColor3f(1.0f, 1.0f, 0.0f);
GL11.glVertex3f(1.0f, -1.0f, -1.0f);
GL11.glVertex3f(-1.0f, -1.0f, -1.0f);
GL11.glVertex3f(-1.0f, 1.0f, -1.0f);
GL11.glVertex3f(1.0f, 1.0f, -1.0f);
GL11.glColor3f(0.0f, 0.0f, 1.0f);
GL11.glVertex3f(-1.0f, 1.0f, 1.0f);
GL11.glVertex3f(-1.0f, 1.0f, -1.0f);
GL11.glVertex3f(-1.0f, -1.0f, -1.0f);
GL11.glVertex3f(-1.0f, -1.0f, 1.0f);
GL11.glColor3f(1.0f, 0.0f, 1.0f);
GL11.glVertex3f(1.0f, 1.0f, -1.0f);
GL11.glVertex3f(1.0f, 1.0f, 1.0f);
GL11.glVertex3f(1.0f, -1.0f, 1.0f);
GL11.glVertex3f(1.0f, -1.0f, -1.0f);
GL11.glEnd();
rotateX += 5.0f;
}
}