package net.tylermurphy.Minecraft.Render; import net.tylermurphy.Minecraft.Render.Data.Mesh; import org.joml.Matrix4f; import net.tylermurphy.Minecraft.Audio.SoundManager; import net.tylermurphy.Minecraft.Render.Data.Texture; import net.tylermurphy.Minecraft.Scene.World; import net.tylermurphy.Minecraft.UI.UIMaster; import net.tylermurphy.Minecraft.Util.Constants; import net.tylermurphy.Minecraft.Render.Data.Display; import net.tylermurphy.Minecraft.Util.MousePicker; import org.joml.Vector3f; public class MainRenderer { private final GuiRenderer guiRenderer; private final FontRenderer fontRenderer; private final ChunkRenderer chunkRenderer; private Matrix4f projectionMatrix; public MainRenderer() { guiRenderer = new GuiRenderer(); fontRenderer = new FontRenderer(); createProjectionMatrix(); MousePicker.init(projectionMatrix); chunkRenderer = new ChunkRenderer(projectionMatrix); } public void update() { if(Display.wasResized) { Display.wasResized = false; createProjectionMatrix(); } chunkRenderer.render(projectionMatrix); if(!World.player.isDead) { World.player.move(); World.player.getTransform().setRotation(new Vector3f( World.camera.getPitch(), -World.camera.getYaw(), World.camera.getRoll() )); World.camera.move(); } UIMaster.renderUI(guiRenderer, fontRenderer); MousePicker.update(); SoundManager.setListenerData(World.player.getTransform().getPosition().x, World.player.getTransform().getPosition().y , World.player.getTransform().getPosition().z); } public void close() { guiRenderer.cleanUp(); chunkRenderer.cleanUp(); Mesh.cleanUp(); Texture.cleanUp(); } private void createProjectionMatrix(){ float aspectRatio = (float) Display.getWidth() / (float) Display.getHeight(); float y_scale = (float) ((1f / Math.tan(Math.toRadians(Constants.FOV / 2f)))); float x_scale = y_scale / aspectRatio; float frustum_length = Constants.FAR_DISTANCE - Constants.NEAR_DISTANCE; projectionMatrix = new Matrix4f() .m00(x_scale) .m11(y_scale) .m22( -((Constants.FAR_DISTANCE + Constants.NEAR_DISTANCE) / frustum_length) ) .m23(-1) .m32( -((2 * Constants.NEAR_DISTANCE * Constants.FAR_DISTANCE) / frustum_length) ) .m33(0); } }