glsl-solid-wireframe
Version:
draw wireframes on a solid mesh using a fragment shader
55 lines (48 loc) • 1.23 kB
JavaScript
module.exports = function (mesh, opts) {
if (!opts) opts = {};
var vars = opts.attributes ? {} : null;
var vkeys = vars && Object.keys(opts.attributes)
if (vars) {
for (var k = 0; k < vkeys.length; k++) {
vars[vkeys[k]] = []
}
}
var i, j;
var pts = [];
var cells = [];
var barycentricAttrs = [];
var mpts = mesh.positions;
var mcells = mesh.cells;
var c = 0;
for (i = 0; i < mesh.cells.length; i++) {
var cell = mcells[i];
if (cell.length === 3) {
pts.push(mpts[cell[0]]);
pts.push(mpts[cell[1]]);
pts.push(mpts[cell[2]]);
barycentricAttrs.push([0, 0]);
barycentricAttrs.push([1, 0]);
barycentricAttrs.push([0, 1]);
cells.push(c++);
cells.push(c++);
cells.push(c++);
if (vkeys) {
for (j = 0; j < vkeys.length; j++) {
var vkey = vkeys[j];
vars[vkey].push(opts.attributes[vkey][cell[0]]);
vars[vkey].push(opts.attributes[vkey][cell[1]]);
vars[vkey].push(opts.attributes[vkey][cell[2]]);
}
}
}
}
var ret = {
positions: pts,
attributes: vars,
barycentric: barycentricAttrs
};
if (mesh.cells) {
ret.cells = cells;
}
return ret;
};