Skip to content
Snippets Groups Projects
Commit e30aca88 authored by Alexander Rose's avatar Alexander Rose
Browse files

Meshbuilder: .addTriangle, .addTriangleStrip, .addTriangleFan

parent 260dfb41
Branches
Tags
No related merge requests found
......@@ -18,6 +18,8 @@ const tmpV = Vec3.zero()
const tmpMat3 = Mat3.zero()
const tmpVecA = Vec3.zero()
const tmpVecB = Vec3.zero()
const tmpVecC = Vec3.zero()
const tmpVecD = Vec3.zero()
export namespace MeshBuilder {
export interface State {
......@@ -40,6 +42,45 @@ export namespace MeshBuilder {
}
}
export function addTriangle(state: State, a: Vec3, b: Vec3, c: Vec3) {
const { vertices, normals, indices, groups, currentGroup } = state
const offset = vertices.elementCount
// positions
ChunkedArray.add3(vertices, a[0], a[1], a[2]);
ChunkedArray.add3(vertices, b[0], b[1], b[2]);
ChunkedArray.add3(vertices, c[0], c[1], c[2]);
Vec3.triangleNormal(tmpV, a, b, c)
for (let i = 0; i < 3; ++i) {
ChunkedArray.add3(normals, tmpV[0], tmpV[1], tmpV[2]); // normal
ChunkedArray.add(groups, currentGroup); // group
}
ChunkedArray.add3(indices, offset, offset + 1, offset + 2);
}
export function addTriangleStrip(state: State, vertices: ArrayLike<number>, indices: ArrayLike<number>) {
Vec3.fromArray(tmpVecC, vertices, indices[0] * 3)
Vec3.fromArray(tmpVecD, vertices, indices[1] * 3)
for (let i = 2, il = indices.length; i < il; i += 2) {
Vec3.copy(tmpVecA, tmpVecC)
Vec3.copy(tmpVecB, tmpVecD)
Vec3.fromArray(tmpVecC, vertices, indices[i] * 3)
Vec3.fromArray(tmpVecD, vertices, indices[i + 1] * 3)
addTriangle(state, tmpVecA, tmpVecB, tmpVecC)
addTriangle(state, tmpVecB, tmpVecD, tmpVecC)
}
}
export function addTriangleFan(state: State, vertices: ArrayLike<number>, indices: ArrayLike<number>) {
Vec3.fromArray(tmpVecA, vertices, indices[0] * 3)
for (let i = 2, il = indices.length; i < il; ++i) {
Vec3.fromArray(tmpVecB, vertices, indices[i - 1] * 3)
Vec3.fromArray(tmpVecC, vertices, indices[i] * 3)
addTriangle(state, tmpVecA, tmpVecC, tmpVecB)
}
}
export function addPrimitive(state: State, t: Mat4, primitive: Primitive) {
const { vertices: va, normals: na, indices: ia } = primitive
const { vertices, normals, indices, groups, currentGroup } = state
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment