我正在尝试将着色器与React three-fiber和Typescript一起使用。着色器文件:
import { ShaderMaterial } from "three"
import { extend } from "react-three-fiber"
class CustomMaterial extends ShaderMaterial {
constructor() {
super({
vertexShader: `...`,
fragmentShader: `...`,
uniforms: [...]
})
}
}
extend({ CustomMaterial })
以及组件文件:
<mesh
key={el.name}
material={el.material}
receiveShadow
castShadow
>
<bufferGeometry attach="geometry" {...el.geometry} />
<customMaterial attach="material" />
</mesh>
我收到错误:
类型上不存在属性"customMaterial"'JSX。IntrinsicElements。
尝试:
declare global {
namespace JSX {
interface IntrinsicElements {
customMaterial: ReactThreeFiber.Object3DNode<CustomMaterial, typeof CustomMaterial>
}
}
}
你可能还需要在你的进口中坚持以下几点:
import { extend } from 'react-three-fiber'
...
extend ({ CustomMaterial })
我只想补充一点,如果你想添加自定义材料以外的东西,你可以使用ReactThreeFiber。Object3DNode。
我试图让轨道控制系统发挥作用,并设法用以下方法做到了这一点:
import { extend } from '@react-three/fiber';
import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls';
declare global {
namespace JSX {
interface Intrinsicelements {
orbitControls: ReactThreeFiber.Node<OrbitControls, typeof OrbitControls>;
}
}
}
extend({ OrbitControls });