UNPKG

@polygonjs/polygonjs

Version:

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

71 lines (70 loc) 2.31 kB
"use strict"; import { Vector3, Quaternion } from "three"; import { ObjectNamedFunction3, ObjectNamedFunction4 } from "./_Base"; import { InstanceAttrib } from "../../core/geometry/Instancer"; import { _setPointAttributeVector3Name, _setPointAttributeQuaternionName, _setPointAttributeVector3MultName } from "./_SetPoint"; import { quatLookAt } from "../../core/LookAt"; import { markAttributeAsNeedsUpdateForFrame } from "../../core/geometry/Attribute"; const _q = new Quaternion(); const _q2 = new Quaternion(); const _v3 = new Vector3(); export class setPointInstanceLookAt extends ObjectNamedFunction4 { static type() { return "setPointInstanceLookAt"; } func(object3D, ptnum, targetPosition, up, lerp) { const geometry = object3D.geometry; if (!geometry) { return; } const positionAttribute = geometry.getAttribute(InstanceAttrib.POSITION); const quaternionAttribute = geometry.getAttribute(InstanceAttrib.QUATERNION); if (!(positionAttribute && quaternionAttribute)) { return; } _v3.fromBufferAttribute(positionAttribute, ptnum); quatLookAt(_v3, targetPosition, up, _q); if (lerp >= 1) { _q.toArray(quaternionAttribute.array, ptnum * 4); } else { if (!quaternionAttribute) { return; } _q2.fromBufferAttribute(quaternionAttribute, ptnum); _q2.slerp(_q, lerp); _q2.toArray(quaternionAttribute.array, ptnum * 4); } markAttributeAsNeedsUpdateForFrame(quaternionAttribute, this.timeController.frame()); } } export class setPointInstancePosition extends ObjectNamedFunction3 { constructor() { super(...arguments); this.func = _setPointAttributeVector3Name(this, InstanceAttrib.POSITION); } static type() { return "setPointInstancePosition"; } } export class setPointInstanceQuaternion extends ObjectNamedFunction3 { constructor() { super(...arguments); this.func = _setPointAttributeQuaternionName(this, InstanceAttrib.QUATERNION); } static type() { return "setPointInstanceQuaternion"; } } export class setPointInstanceScale extends ObjectNamedFunction4 { constructor() { super(...arguments); this.func = _setPointAttributeVector3MultName(this, InstanceAttrib.SCALE); } static type() { return "setPointInstanceScale"; } }