1
0

highlightedMesh.ts 895 B

12345678910111213141516171819202122232425262728293031
  1. import * as THREE from 'three'
  2. export class HightlightMesh extends THREE.Mesh {
  3. type = 'HightlightMesh'
  4. createTime: number
  5. invalidate: (frames?: number) => void
  6. constructor( invalidate: (frames?: number) => void, ...args: THREE.Mesh['args']) {
  7. super(...args)
  8. this.createTime = Date.now()
  9. this.invalidate = invalidate
  10. invalidate()
  11. }
  12. onBeforeRender() {
  13. const currentTime = Date.now()
  14. const time = (currentTime - this.createTime) / 1000
  15. // Pulsing effect parameters
  16. const scaleAmplitude = 0.07 // Amplitude of the scale pulsation
  17. const pulseSpeed = 2.5 // Speed of the pulsation
  18. // Calculate the scale factor with a sine function for pulsing effect
  19. const scaleFactor = 1 + scaleAmplitude * Math.sin(pulseSpeed * time)
  20. // Apply the scale factor
  21. this.scale.set(scaleFactor, scaleFactor, scaleFactor)
  22. this.invalidate()
  23. }
  24. }