| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- import { Scene } from '../demo/lmm/core/Scene'
- import { Img2D } from '../demo/lmm/objects/Img2D'
- import { Vector2 } from '../demo/lmm/math/Vector2'
- import { ImagePromise } from '../demo/lmm/objects/ObjectUtils'
- /* 图案数据类型 */
- type Img2DType = {
- src?: string
- globalCompositeOperation: GlobalCompositeOperation
- }
- class Effector {
- scene = new Scene()
- onMounted(effectDom: HTMLDivElement) {
- const {
- scene: { canvas },
- } = this
- const { clientWidth: fx, clientHeight: fy } = effectDom
- effectDom.append(canvas)
- canvas.width = fx
- canvas.height = fy
- }
- onUnmounted() {
- this.scene.canvas.remove()
- }
- /* 添加图案 */
- addImgs(effectImg2DData: Img2DType[], resultCanvas: HTMLCanvasElement) {
- const {
- scene: {
- canvas: { width },
- },
- scene,
- } = this
- const pros: Promise<HTMLImageElement>[] = []
- effectImg2DData.forEach(({ src, globalCompositeOperation }, index) => {
- let image: HTMLImageElement | HTMLCanvasElement = new Image()
- if (src) {
- image.src = src
- pros.push(ImagePromise(image))
- } else {
- image = resultCanvas
- }
- scene.add(
- new Img2D({
- size: new Vector2(width),
- offset: new Vector2(-width / 2),
- index,
- image,
- style: { globalCompositeOperation },
- })
- )
- })
- /* 渲染 */
- Promise.all(pros).then(() => {
- scene.render()
- })
- }
- /* 渲染 */
- render() {
- this.scene.render()
- }
- }
- export { Effector }
|