package views;
import entities.config.GLConfigVariable;
import entities.Pair;
import static org.lwjgl.opengl.GL11.*;
//---------------------------------------------------------------
//
public class Image2D {
private int id; // テクスチャのID
private Pair<Double> spriteSize; // スプライトの幅高
private Pair<Double> position; // スプライトの座標(画面座標)
private Color color; // スプライトの色
private double rotation; // 回転(度)
private double scale; // 拡大
private double alpha; // 透明度
//---------------------------------------------------------------
//---------------------------------------------------------------
//
public Image2D(Texture tex) {
if (tex != null)
this.id = tex.getId();
else
this.id = 0;
this.position = new Pair<>(0.0, 0.0);
this.color = new Color(1, 1, 1, 1);
if (tex != null)
spriteSize = new Pair<>((double) tex.getWidth(), (double) tex.getHeight());
else
spriteSize = new Pair<>(32d, 20d);
rotation = 0.0;
scale = 1.0;
alpha = 1.0;
}
//---------------------------------------------------------------
//---------------------------------------------------------------
// setter
public void setRotation(double rotation) {
this.rotation = rotation;
}
public void setPosition(Pair<Double> position) {
this.position = position;
}
public void setScale(double scale) {
this.scale = scale;
}
//---------------------------------------------------------------
//---------------------------------------------------------------
//
public void draw() {
// テクスチャの結合
glBindTexture(GL_TEXTURE_2D, id);
// 変換行列の追加
glPushMatrix();
// モデルビューモード
glMatrixMode(GL_MODELVIEW);
// 行列の設定
glLoadIdentity(); // 単位行列化
glTranslated(position.getFirst(), position.getSecond(), 0); // 移動
glRotated(rotation, 0, 0, 1); // 回転
glScaled(scale, scale, 1); // 拡縮
// プロジェクションモード
glMatrixMode(GL_PROJECTION);
// 行列の設定
glLoadIdentity(); // 単位行列化
glOrtho(0, GLConfigVariable.WIDTH, 0, GLConfigVariable.HEIGHT, -GLConfigVariable.DEPTH, GLConfigVariable.DEPTH); // 正射影投影
// ビューポートの範囲
glViewport(0, 0, GLConfigVariable.WIDTH, GLConfigVariable.HEIGHT);
// ポリゴンの色
glColor4d(color.getR(), color.getG(), color.getB(), alpha);
// ポリゴンの作成とテクスチャの適応
glBegin(GL_TRIANGLE_STRIP);
glTexCoord2d(0, 0);
glVertex2d(-spriteSize.getFirst() / 2, spriteSize.getSecond() / 2);
glTexCoord2d(0, 1);
glVertex2d(-spriteSize.getFirst() / 2, -spriteSize.getSecond() / 2);
glTexCoord2d(1, 0);
glVertex2d(spriteSize.getFirst() / 2, spriteSize.getSecond() / 2);
glTexCoord2d(1, 1);
glVertex2d(spriteSize.getFirst() / 2, -spriteSize.getSecond() / 2);
glEnd();
// 行列の破棄
glPopMatrix();
// テクスチャの解除
glBindTexture(GL_TEXTURE_2D, 0);
}
//---------------------------------------------------------------
}