package gameEngine.views; import org.joml.Vector3f; import static org.lwjgl.opengl.GL11.*; public abstract class Renderer { protected Vector3f position = new Vector3f(0, 0, 0); protected Vector3f rotation = new Vector3f(0, 0, 0); protected Vector3f scale = new Vector3f(1, 1, 1); public Color color = new Color(1f, 1f, 1f, 1f); public void setPosition(float x, float y){ this.position.x = x; this.position.y = y; } public void setPosition(float x, float y, float z){ this.position = new Vector3f(x,y,z); } public void setPosition(Vector3f pos){ this.position = pos; } public void setRotation(float x, float y, float z){ this.rotation = new Vector3f(x,y,z); } public void setRotation(Vector3f rot){ this.rotation = rot; } public void setScale(float x, float y){ this.scale.x = x; this.scale.y = y; } public void setScale(float x, float y, float z){ this.scale = new Vector3f(x,y,z); } public void setScale(Vector3f scale){ this.scale = scale; } protected void prepareRendering() { glMatrixMode(GL_PROJECTION); glPushMatrix(); glLoadIdentity(); glOrtho(0, Window.get().width, Window.get().height, 0, -1000, 1000); glMatrixMode(GL_MODELVIEW); glPushMatrix(); glLoadIdentity(); float zScale = (position.z >= 0) ? 1.0f + (position.z * 0.1f) : 1.0f / (1.0f + Math.abs(position.z) * 0.1f); glTranslatef(position.x, position.y, position.z); glRotatef(rotation.x, 1, 0, 0); glRotatef(rotation.y, 0, 1, 0); glRotatef(rotation.z, 0, 0, 1); glScalef(scale.x * zScale, scale.y * zScale, scale.z); glEnable(GL_TEXTURE_2D); glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glColor4f(color.r, color.g, color.b, color.a); } protected void endRendering() { glDisable(GL_TEXTURE_2D); glBindTexture(GL_TEXTURE_2D, 0); glPopMatrix(); glMatrixMode(GL_PROJECTION); glPopMatrix(); } public abstract void render(); }