使用 Typescript 和 React 三纤维的着色器

Bak*_*akr 4 typescript react-three-fiber

我正在尝试将着色器与 React-三纤维和 Typescript 一起使用。着色器文件:

import { ShaderMaterial } from "three"
import { extend } from "react-three-fiber"

class CustomMaterial extends ShaderMaterial {
  constructor() {
    super({
      vertexShader: `...`,
      fragmentShader: `...`,
      uniforms: [...]
    })
  }
}

extend({ CustomMaterial })
Run Code Online (Sandbox Code Playgroud)

和组件文件:

<mesh
  key={el.name}
  material={el.material}
  receiveShadow
  castShadow
>
  <bufferGeometry attach="geometry" {...el.geometry} />
  <customMaterial attach="material" />
</mesh>
Run Code Online (Sandbox Code Playgroud)

我收到错误:

类型“JSX.IntrinsicElements”上不存在属性“customMaterial”。

Jon*_*Jon 7

尝试:

declare global {
  namespace JSX {
    interface IntrinsicElements {
      customMaterial: ReactThreeFiber.Object3DNode<CustomMaterial, typeof CustomMaterial>
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

您可能还需要在导入中添加以下内容:

import { extend } from 'react-three-fiber'
...
extend ({ CustomMaterial })
Run Code Online (Sandbox Code Playgroud)