Newer
Older
JumpingGame / src / main / java / entities / Image2D.java
k-fujii on 15 Nov 2021 2 KB entity→entitiesに変更
package entities;

import static org.lwjgl.opengl.GL11.*;

//---------------------------------------------------------------
//
public class Image2D {

    private int id; // テクスチャのID
    private Vec2 wh; // スプライトの幅高
    private Vec2 position; // スプライトの座標(画面座標)
    private Color color; // スプライトの色
    private double rotation; // 回転(度)
    private double scale; // 拡大
    private double alpha; // 透明度

    //---------------------------------------------------------------
    //---------------------------------------------------------------
    //
    public Image2D(Texture tex, double x, double y) {
        if (tex != null)
            this.id = tex.getId();
        else
            this.id = 0;

        this.position = new Vec2(x, y);
        this.color = new Color(1, 1, 1, 1);

        if (tex != null)
            wh = new Vec2(tex.getWidth(), tex.getHeight());
        else
            wh = new Vec2(30, 30);

        rotation = 0.0;
        scale = 1.0;
        alpha = 1.0;
    }

    //---------------------------------------------------------------
    //---------------------------------------------------------------
    // setter
    public void setRotation(double rotation) {
        this.rotation = rotation;
    }

    //---------------------------------------------------------------
    //---------------------------------------------------------------
    //
    public void draw() {
        // テクスチャの結合
        glBindTexture(GL_TEXTURE_2D, id);

        // 変換行列の追加
        glPushMatrix();

        // モデルビューモード
        glMatrixMode(GL_MODELVIEW);
        // 行列の設定
        glLoadIdentity(); // 単位行列化
        glTranslated(position.getX(), position.getY(), 0); // 移動
        glRotated(rotation, 0, 0, 1); // 回転
        glScaled(scale, scale, 1); // 拡縮

        // プロジェクションモード
        glMatrixMode(GL_PROJECTION);
        // 行列の設定
        glLoadIdentity(); // 単位行列化
        glOrtho(0, Const.WIDTH, 0, Const.HEIGHT, -Const.DEPTH, Const.DEPTH); // 正射影投影

        // ビューポートの範囲
        glViewport(0, 0, Const.WIDTH, Const.HEIGHT);

        // ポリゴンの色
        glColor4d(color.getR(), color.getG(), color.getB(), alpha);

        // ポリゴンの作成とテクスチャの適応
        glBegin(GL_TRIANGLE_STRIP);
        glTexCoord2d(0, 0);
        glVertex2d(-wh.getX() / 2, wh.getY() / 2);
        glTexCoord2d(0, 1);
        glVertex2d(-wh.getX() / 2, -wh.getY() / 2);
        glTexCoord2d(1, 0);
        glVertex2d(wh.getX() / 2, wh.getY() / 2);
        glTexCoord2d(1, 1);
        glVertex2d(wh.getX() / 2, -wh.getY() / 2);
        glEnd();

        // 行列の破棄
        glPopMatrix();

        // テクスチャの解除
        glBindTexture(GL_TEXTURE_2D, 0);
    }

    //---------------------------------------------------------------
}