@loaders.gl/math
Version:
Experimental math classes for loaders.gl
67 lines (64 loc) • 2.31 kB
text/typescript
import {GL} from '../constants';
/**
* Different methods of working with geometries depending on glType
/**
/**
* @param mode
* @returns draw points | lines | triangles
*/
export function getPrimitiveModeType(mode?: number): number {
switch (mode) {
case GL.POINTS: // draw single points.
return GL.POINTS;
case GL.LINES: // draw lines. Each set of two vertices is treated as a separate line segment.
case GL.LINE_STRIP: // draw lines. Each vertex connects to the one after it.
case GL.LINE_LOOP: // draw a connected group of line segments from the first vertex to the last
return GL.LINES;
case GL.TRIANGLES:
case GL.TRIANGLE_STRIP:
case GL.TRIANGLE_FAN: // draw a connected group of triangles.
return GL.TRIANGLES;
default:
throw new Error('Unknown primitive mode');
}
}
/**
* @param mode
* @returns true | false
*/
export function isPrimitiveModeExpandable(mode: number): boolean {
switch (mode) {
case GL.LINE_STRIP: // draw lines. Each vertex connects to the one after it.
case GL.LINE_LOOP: // draw a connected group of line segments from the first vertex to the last
case GL.TRIANGLE_STRIP: // draw a connected group of triangles.
case GL.TRIANGLE_FAN: // draw a connected group of triangles.
return true;
default:
return false;
}
}
/**
* Returns new length depends on glType
* @param mode
* @param length
* @returns new length
*/
export function getPrimitiveModeExpandedLength(mode: number, length: number): number {
switch (mode) {
case GL.POINTS: // draw single points.
return length;
case GL.LINES: // draw lines. Each set of two vertices is treated as a separate line segment.
return length;
case GL.LINE_STRIP: // draw lines. Each vertex connects to the one after it.
return length;
case GL.LINE_LOOP: // draw a connected group of line segments from the first vertex to the last
return length + 1;
case GL.TRIANGLES: // draw triangles. Each set of three vertices creates a separate triangle.
return length;
case GL.TRIANGLE_STRIP: // draw a connected group of triangles.
case GL.TRIANGLE_FAN: // draw a connected group of triangles.
return (length - 2) * 3;
default:
throw new Error('Unknown length');
}
}