UNPKG

@xtor/cga.js

Version:

Xtor Compute Geometry Algorithm Libary 计算几何算法库

73 lines (72 loc) 2.47 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.toGeoBuffer = exports.triangListToBuffer = exports.indexable = void 0; var Vec3_1 = require("../math/Vec3"); var Vec2_1 = require("../math/Vec2"); var array_1 = require("../utils/array"); function indexable(obj, refIndexInfo, force) { if (refIndexInfo === void 0) { refIndexInfo = { index: 0 }; } if (force === void 0) { force = false; } if (obj instanceof Array) { for (var i = 0; i < obj.length; i++) indexable(obj[i], refIndexInfo); } else if (obj instanceof Object) { if (obj.index === undefined) obj.index = refIndexInfo.index++; else if (force) obj.index = refIndexInfo.index++; } } exports.indexable = indexable; function triangListToBuffer(vertices, triangleList) { indexable(triangleList); var indices = []; array_1.forall(triangleList, function (v) { indices.push(v.index); }); return toGeoBuffer(vertices, indices); } exports.triangListToBuffer = triangListToBuffer; /** * 顶点纹理坐标所以转化为buffer数据 * @param {Array<Verctor3|Number>} vertices * @param {Array<Number>} indices * @param {Array<Verctor2|Number>} uvs */ function toGeoBuffer(inVertices, indices, inUvs) { if (inUvs === void 0) { inUvs = []; } var vertices = []; if (Vec3_1.Vec3.isVec3(inVertices[0])) { for (var i = 0; i < inVertices.length; i++) { var v = inVertices[i]; vertices.push(v.x, v.y, v.z); } } else { vertices = inVertices; } var uvs = []; if (inUvs.length > 0 && Vec2_1.Vec2.isVec2(inUvs[0])) { for (var i = 0; i < inUvs.length; i++) { var uv = inUvs[i]; uvs.push(uv.x, uv.y); } } else { uvs = inUvs; } var verticesBuffer = new Float32Array(vertices); var uvsBuffer = uvs.length === 0 ? new Float32Array(vertices.length / 3 * 2) : new Float32Array(uvs); var indicesBuffer; if (indices instanceof Uint32Array || indices instanceof Uint16Array) indicesBuffer = indices; else indicesBuffer = new ((verticesBuffer.length / 3) > 65535 ? Uint32Array : Uint16Array)(indices); return { vertices: verticesBuffer, uvs: uvsBuffer, indices: indicesBuffer }; } exports.toGeoBuffer = toGeoBuffer;