「毎日Unity」の技術ブログ

開発で役立つ情報を発信する

【Processing】P3Dを使わずに三次元の物体の描画を試みる(1)

ProcessingでP3Dを使わずに三次元の物体の描画に挑戦してみました。

[ 実行結果 ]

[ プログラム ]

final int Width_Window = 600;
final int Height_Window = 600;

final int FrameRate = 60;

float AngleX_Cube = 0;
float AngleY_Cube = 0;
float Width_Cube = 100;

void settings()
{
    size(Width_Window, Height_Window);
}

void setup()
{
    frameRate(FrameRate);
}

void draw() 
{
    background(255);

    float PosX = Width_Window / 2;
    float PosY = Height_Window / 2;

    translate(PosX, PosY);

    float[][] Verts = new float[8][3];

    for (int i = 0; i < 8; i++) 
    {
        float PosX_Vert = (i & 1) == 0 ? -Width_Cube / 2 : Width_Cube / 2;
        float PosY_Vert = (i & 2) == 0 ? -Width_Cube / 2 : Width_Cube / 2;
        float PosZ_Vert = (i & 4) == 0 ? -Width_Cube / 2 : Width_Cube / 2;

        float PosX_Vert_ = PosX_Vert * cos(AngleY_Cube) - PosZ_Vert * sin(AngleY_Cube);
        float PosZ_Vert_ = PosX_Vert * sin(AngleY_Cube) + PosZ_Vert * cos(AngleY_Cube);
        PosX_Vert = PosX_Vert_;
        PosZ_Vert = PosZ_Vert_;

        float PosY_Vert_ = PosY_Vert * cos(AngleX_Cube) - PosZ_Vert * sin(AngleX_Cube);
        PosZ_Vert = PosY_Vert * sin(AngleX_Cube) + PosZ_Vert * cos(AngleX_Cube);
        PosY_Vert = PosY_Vert_;

        Verts[i][0] = PosX_Vert;
        Verts[i][1] = PosY_Vert;
        Verts[i][2] = PosZ_Vert;
    }

    for (int i = 0; i < 4; i++) 
    {
        final int Index = (i + 1) % 2 + i / 2 * 2;

        line(Verts[i][0], Verts[i][1], Verts[Index][0], Verts[Index][1]);
        line(Verts[i + 4][0], Verts[i + 4][1], Verts[Index + 4][0], Verts[Index + 4][1]);
        line(Verts[i][0], Verts[i][1], Verts[i + 4][0], Verts[i + 4][1]);
    }

    line(Verts[0][0], Verts[0][1], Verts[1][0], Verts[1][1]);
    line(Verts[3][0], Verts[3][1], Verts[2][0], Verts[2][1]);
    line(Verts[7][0], Verts[7][1], Verts[6][0], Verts[6][1]);
    line(Verts[4][0], Verts[4][1], Verts[5][0], Verts[5][1]);

    AngleX_Cube += radians(1);
    AngleY_Cube += radians(1);
}

[ 感想 ]

ChatGPTに吐かせたコードを改良して立方体の描画をしようしたのですが、吐かせたコードの内容が理解できなくて失敗しました。なぜビット演算子を使う必要があるのかがわからない。

[ 関連記事 ]

edunity.hatenablog.com