1
1
0
0
0
1
0
1
1
var xhr = new XMLHttpRequest();
xhr.open("GET", "example.stl", true);
xhr.responseType = "arraybuffer";
xhr.onload = function(event){
var arrayBuffer = xhr.response;
...
}
xhr.send();
データ | サイズ |
---|---|
ヘッダ | 8バイト文字が80個 |
三角形の数 | 4バイトの符号なし整数 |
三角形の情報 | 三角形の数 × 50バイト |
let dataView = new DataView(arrayBuffer);
let faces = dataView.getUint32( 80, true );
A(0,1,0)
B(1,3,5)
C(4,1,2)
法線ベクトル(1,2,3)
法線ベクトルのx座標 | 4バイト浮動小数点 |
法線ベクトルのy座標 | 4バイト浮動小数点 |
法線ベクトルのz座標 | 4バイト浮動小数点 |
Aのx座標 | 4バイト浮動小数点 |
Aのy座標 | 4バイト浮動小数点 |
Aのz座標 | 4バイト浮動小数点 |
Bのx座標 | 4バイト浮動小数点 |
Bのy座標 | 4バイト浮動小数点 |
Bのz座標 | 4バイト浮動小数点 |
Cのx座標 |
4バイト浮動小数点 |
Cのy座標 |
4バイト浮動小数点 |
Cのz座標 |
4バイト浮動小数点 |
色の指定 |
2バイト |
let offset = 84;
let faceLength = 12 * 4 + 2;
let polygons = [];
for(var face = 0; face < faces; face++ ) {
let begin = offset + face * faceLength;
let vertex1Begin = begin + 12;
let vertex2Begin = vertex1Begin + 12;
let vertex3Begin = vertex2Begin + 12;
....
}
var vertex1 = {
x : dataView.getFloat32(vertex1Begin, true),
y : dataView.getFloat32(vertex1Begin + 4, true),
z : dataView.getFloat32(vertex1Begin + 8, true)
};
var vertex2 = { ... };
var vertex3 = { ... };
polygons.push({
vertices : [vertex1, vertex2, vertex3]
});