@woosh/meep-engine
Version:
Pure JavaScript game engine. Fully featured and production ready.
29 lines (20 loc) • 975 B
JavaScript
import { BufferAttribute } from "three";
import { genTangSpace, SMikkTSpaceContext } from "./MikkTSpace.js";
/**
* only works with indexed geometries
* @param {THREE.BufferGeometry} geo
*/
export function buffer_geometry_generate_tangents(geo) {
const attribute_position = geo.getAttribute('position');
if (geo.getAttribute('tangent') === undefined) {
geo.setAttribute('tangent', new BufferAttribute(new Float32Array(attribute_position.count * 4), 4, false));
}
const attribute_tangent = geo.getAttribute('tangent');
const ctx = new SMikkTSpaceContext();
ctx.geometry_buffer_index = geo.getIndex().array;
ctx.geometry_buffer_vertex_position = attribute_position.array;
ctx.geometry_buffer_vertex_normal = geo.getAttribute('normal').array;
ctx.geometry_buffer_vertex_uv = geo.getAttribute('uv').array;
ctx.geometry_buffer_vertex_tangent = attribute_tangent.array;
genTangSpace(ctx);
}