Rework rendering
Adds default, stereoscopic, tiling, cubic and equirectangular frame rendering
This commit is contained in:
@@ -0,0 +1,41 @@
|
||||
package eu.crushedpixel.replaymod.video.entity;
|
||||
|
||||
import eu.crushedpixel.replaymod.video.frame.TilingFrameRenderer;
|
||||
|
||||
import static net.minecraft.client.renderer.GlStateManager.scale;
|
||||
import static net.minecraft.client.renderer.GlStateManager.translate;
|
||||
import static org.lwjgl.opengl.GL11.glFrustum;
|
||||
|
||||
public class TilingEntityRenderer extends CustomEntityRenderer {
|
||||
private final TilingFrameRenderer renderer;
|
||||
private int tileX, tileY;
|
||||
|
||||
public TilingEntityRenderer(TilingFrameRenderer renderer) {
|
||||
this.renderer = renderer;
|
||||
}
|
||||
|
||||
public void setTile(int tileX, int tileY) {
|
||||
this.tileX = tileX;
|
||||
this.tileY = tileY;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void gluPerspective(float fovY, float aspect, float zNear, float zFar) {
|
||||
double height = Math.tan(fovY / 360 * Math.PI) * zNear;
|
||||
double width = height * aspect;
|
||||
|
||||
int videoWidth = renderer.getVideoWidth();
|
||||
int videoHeight = renderer.getVideoHeight();
|
||||
int tileWidth = renderer.getTileWidth();
|
||||
int tileHeight = renderer.getTileHeight();
|
||||
double tilesX = (double) videoWidth / tileWidth;
|
||||
double tilesY = (double) videoHeight / tileHeight;
|
||||
double tilesMin = Math.min(tilesX, tilesY);
|
||||
scale(tilesMin, tilesMin, 1);
|
||||
double xOffset = (2 * tileX - tilesX + 1) / tilesMin;
|
||||
double yOffset = (2 * tileY - tilesY + 1) / tilesMin;
|
||||
translate(-xOffset, yOffset, 0);
|
||||
|
||||
glFrustum(-width, width, -height, height, zNear, zFar);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user