A simple custom geometry for three.js — generates a triangle based on the lengths of its sides. Supports one or two segments, and includes UV, normal, and position attributes.
npm install @akb2/three-triangle-geometryimport { TriangleGeometry } from "@akb2/three-triangle-geometry";
import { Mesh, MeshStandardMaterial, Scene } from "three";
const scene = new Scene();
const geometry = new TriangleGeometry(5, 6, 4);
const material = new MeshStandardMaterial({ color: 0xffaa00, wireframe: true });
const mesh = new Mesh(geometry, material);
scene.add(mesh);new TriangleGeometry(sideA: number, sideB: number, sideC?: number, segments?: number);| Parameter | Type | Description |
|---|---|---|
sideA |
number |
Left cathetus. |
sideB |
number |
Base of the triangle. |
sideC |
number (optional) |
Right cathetus. If not provided, it will be equal to sideA. |
segments |
1 or 2 (optional) |
Number of horizontal segments. Default is 1. |
// One segment
const tri1 = new TriangleGeometry(5, 6);
// Two segments
const tri2 = new TriangleGeometry(5, 6, undefined, 2);TriangleGeometry.fromJSON(data: Record<string, number>): TriangleGeometry;const data = { sideA: 5, sideB: 6, sideC: 4 };
const triangle = TriangleGeometry.fromJSON(data);export interface TriangleGeometryParameters {
sideA: number;
sideB: number;
sideC: number;
segments: number;
}-
Sets missing sideC if not provided as a sideA value:
-
Calculates vertex coordinates (a, b, c) using trigonometric formulas.
-
Automatically builds:
- positions
- normals
- UVs (uv and uv2)
-
Stores parameters in:
geometry.parameters = { sideA, sideB, sideC, segments };
MIT © Andrei Kobelev (@akb2)