UNPKG

@polygonjs/polygonjs

Version:

node-based WebGL 3D engine https://polygonjs.com

61 lines (58 loc) 1.75 kB
import {Vector2, Vector3} from 'three'; import {_sizzleVec3XY, _sizzleVec3XZ, _sizzleVec3YZ} from './_Sizzle'; import {NamedFunction4} from './_Base'; // float SDFExtrudeX( in vec3 p, in float sdf, in float h ) // { // vec2 w = vec2( sdf, abs(p.x) - h ); // return min(max(w.x,w.y),0.0) + length(max(w,0.0)); // } // float SDFExtrudeY( in vec3 p, in float sdf, in float h ) // { // vec2 w = vec2( sdf, abs(p.y) - h ); // return min(max(w.x,w.y),0.0) + length(max(w,0.0)); // } // float SDFExtrudeZ( in vec3 p, in float sdf, in float h ) // { // vec2 w = vec2( sdf, abs(p.z) - h ); // return min(max(w.x,w.y),0.0) + length(max(w,0.0)); // } const _sizzle2 = new Vector2(); export class SDFRevolutionX extends NamedFunction4<[Vector3, Vector3, number, Vector2]> { static override type() { return 'SDFRevolutionX'; } func(p: Vector3, center: Vector3, o: number, target: Vector2): Vector2 { p.sub(center); _sizzleVec3YZ(p, _sizzle2); const l = _sizzle2.length(); target.x = l - o; target.y = p.x; return target; } } export class SDFRevolutionY extends NamedFunction4<[Vector3, Vector3, number, Vector2]> { static override type() { return 'SDFRevolutionY'; } func(p: Vector3, center: Vector3, o: number, target: Vector2): Vector2 { p.sub(center); _sizzleVec3XZ(p, _sizzle2); const l = _sizzle2.length(); target.x = l - o; target.y = p.y; return target; } } export class SDFRevolutionZ extends NamedFunction4<[Vector3, Vector3, number, Vector2]> { static override type() { return 'SDFRevolutionZ'; } func(p: Vector3, center: Vector3, o: number, target: Vector2): Vector2 { p.sub(center); _sizzleVec3XY(p, _sizzle2); const l = _sizzle2.length(); target.x = l - o; target.y = p.z; return target; } }