bem130が2022年の3月から7月ごろにかけて作っていた3D描画のプログラムを改良しつつ、使いやすいようにまとめたものです。
./js
オブジェクトは、三角形の面の配列で表される
polygon = [[x,y,z],[x,y,z],[x,y,z],[r,g,b]];
// polygon = [一つ目の頂点,二つ目の頂点,三つ目の頂点, 面の色]
object = [polygon,polygon,polygon,...];
// object = [一つ目の面,二つ目の面,三つ目の面,...]
カメラは、座標・向き・解像度で表される
今後、視野の広さも追加予定
pos = [x,y,z];
// pos = [x座標,y座標,z座標]
angle = [h,v];
// angle = [水平方向,垂直方向]
display = [x,y];
// display = [横の解像度,縦の解像度]
camera = [pos,angle,display];
// camera = [座標,向き,解像度]
classを初期化する
let tddraw = new tdDRAW();
オブジェクトを設定する
tddraw.setObj(object);
カメラを設定する
tddraw.setCamera(camera);
画像を出力する
返り値はImageData
image = tddraw.getImg();
./cpp
オブジェクトは、ポリゴンの動的配列で表される
ポリゴンは3つの座標と色で表される
tdDrawPolygon.distance
は使用されていない
struct tdDrawPolygon { // ポリゴンの定義
std::array<long double,3> p1; // 1つめの頂点
std::array<long double,3> p2; // 2つめの頂点
std::array<long double,3> p3; // 3つめの頂点
std::array<unsigned char,3> color; // ポリゴンの色
long double distance = 0; // ポリゴンまでの距離 未使用
};
typedef std::vector<struct tdDrawPolygon> tdDrawObject; // オブジェクトの定義
void tdDraw::setObj(tdDrawObject object);
画像を出力する
返り値はunsigned char*
unsigned char* tdDraw::getImg (int width,int height);