ScratchData LogoScratchData
Back to lpv_vql's profile

3D Engine Ver.3

LPlpv_vql•Created June 13, 2025
3D Engine Ver.3
3
3
47 views
View on Scratch

Instructions

←→↑↓ZX WASDQE Ver.2からの改善点 ・同じ座標の点どうしは辞書を作って1つにまとめることで、座標変換の回数を減らした。 ・3Dデータの入力がテキストでできるようになったので、面に規則性がある(?)立体は、プログラムで生成することができ、複雑な図形の入力しやすくなった。例えば球体の3Dデータを出力するプログラムは以下の通り(Python by Chat GPT) import numpy as np radius = 100 lat_div = 10 # 緯度方向の分割数(少なめで軽量) lon_div = 20 # 経度方向の分割数 vertices = [] faces = [] # 頂点生成 for i in range(lat_div + 1): theta = np.pi * i / lat_div for j in range(lon_div): phi = 2 * np.pi * j / lon_div x = radius * np.sin(theta) * np.cos(phi) y = radius * np.sin(theta) * np.sin(phi) z = radius * np.cos(theta) vertices.append((x, y, z)) # 三角形面生成 for i in range(lat_div): for j in range(lon_div): p1 = i * lon_div + j p2 = p1 + lon_div p3 = i * lon_div + (j + 1) % lon_div p4 = p3 + lon_div faces.append((vertices[p1], vertices[p2], vertices[p3])) faces.append((vertices[p3], vertices[p2], vertices[p4])) # 出力形式に整形 def fmt(v): return f"{round(v[0],2)},{round(v[1],2)},{round(v[2],2)}" triangles = [f"{fmt(v1)}_{fmt(v2)}_{fmt(v3)}" for v1, v2, v3 in faces] output_string = "/".join(triangles) print(output_string) ・zソートの方法を選択ソートから挿入ソートにした。おそらくzソートにはこちらのソート方法のほうが向いている。 ...これらのことを改善したため前作に比べ大幅に軽量化などをすることができました。(あくまで"前作に比べて") 動的なオブジェクトの描画には向いていません。 いつか動的なオブジェクト対応の3Dエンジンを作りたいと思っています。 3dスタジオです https://scratch.mit.edu/studios/36193603 タボワリンク https://turbowarp.org/1188286090?hqpen

Project Details

Project ID1188286090
CreatedJune 13, 2025
Last ModifiedJune 19, 2025
SharedJune 15, 2025
Visibilityvisible
CommentsAllowed