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