React 三纤维向 obj 模型添加纹理

Kam*_*cki 4 three.js reactjs react-three-fiber

在我的应用程序中,我想向加载的 .obj 模型添加纹理。我的 .fbx 加载模型也有同样的情况。下面是我的示例代码,但这仅适用于 sphereGeometry 等内容,不适用于加载的模型。

提前致谢!

import { OBJLoader } from 'three/examples/jsm/loaders/OBJLoader'
import { useTexture } from '@react-three/drei'

const OBJModel = ({ file }: { file: string }) => {
  const obj = useLoader(OBJLoader, file)
  const texture = useTexture(textureFile)

  return (
    <mesh>
      <primitive object={obj} />
      <meshStandardMaterial map={texture} attach="material" />
    </mesh>
  )
}
Run Code Online (Sandbox Code Playgroud)

sun*_*eol 8

  1. primitive不是网格的子集。它可以是 的子级group。
  2. primitive 需要几何形状和材料作为道具。Mesh 需要几何形状和材料作为道具。很明显,两者不能用作彼此的子集。
  3. 为了实现你的想法,你只需要使用一个Mesh或primitive. 我建议使用Mesh它有丰富的文档。primitive没有足够的记录。
  4. 获得OBJ的通过useLoader里面可能有复杂的群体。模型通常包含较大的集合,例如group或scene。组和场景不能有纹理。Mesh能。
OBJ(result of useLoader) = scene => group => mesh => geometry, texture
Run Code Online (Sandbox Code Playgroud)

需要遍历才能从网格中获取几何图形。

OBJ(result of useLoader) = scene => group => mesh => geometry, texture
Run Code Online (Sandbox Code Playgroud)

我已经在codesandbox中实现了它。这是工作代码:

https://codesandbox.io/s/crazy-dawn-i6vzb?file=/src/components/Rock.tsx:257-550