如何更改网格纹理?
How do I change mesh textures?
我正在使用 React 开发一个项目,我正在尝试更改正在使用的网格的纹理,但我无法访问 material 属性。每当我将对象记录到控制台时,我都可以看到 material 属性 但我无法通过 'mesh.material' 访问它。有人熟悉这个问题吗?
import React, { useMemo } from 'react';
import { useGLTF, useTexture } from 'drei';
import modelConfig from '../../config/model.config';
const gltfModel = useGLTF(modelConfig.path.meshes, true);
gltfModel.scene.castShadow = true;
gltfModel.scene.receiveShadow = true;
const mesh = gltfModel.scene.getObjectByName("Floor")
console.log(mesh);
useGLTF 是异步的,因此您必须在反应状态回调中访问它,例如 useEffect
尝试添加
useEffect(() =>{
gltfModel.scene.castShadow = true;
gltfModel.scene.receiveShadow = true;
const mesh = gltfModel.scene.getObjectByName("Floor")
});
虽然 useGLTF 在 useEffect 之前还在外面
在互联网上的大多数示例中,我发现人们使用 mesh.material 访问 material 属性。出于某种原因,这对我来说不是一个选择,所以我就是这样做的:
import { useGLTF, useTexture } from 'drei';
import * as THREE from "three";
const gltfModel = useGLTF(modelConfig.path.meshes, true);
const mesh = gltfModel.scene.getObjectByName("Floor")
const texture = new THREE.TextureLoader().load(img);
const material = new THREE.MeshBasicMaterial({
map: texture,
});
mesh['material'] = material;
mesh['material'].needsUpdate = true;
我正在使用 React 开发一个项目,我正在尝试更改正在使用的网格的纹理,但我无法访问 material 属性。每当我将对象记录到控制台时,我都可以看到 material 属性 但我无法通过 'mesh.material' 访问它。有人熟悉这个问题吗?
import React, { useMemo } from 'react';
import { useGLTF, useTexture } from 'drei';
import modelConfig from '../../config/model.config';
const gltfModel = useGLTF(modelConfig.path.meshes, true);
gltfModel.scene.castShadow = true;
gltfModel.scene.receiveShadow = true;
const mesh = gltfModel.scene.getObjectByName("Floor")
console.log(mesh);
useGLTF 是异步的,因此您必须在反应状态回调中访问它,例如 useEffect
尝试添加
useEffect(() =>{
gltfModel.scene.castShadow = true;
gltfModel.scene.receiveShadow = true;
const mesh = gltfModel.scene.getObjectByName("Floor")
});
虽然 useGLTF 在 useEffect 之前还在外面
在互联网上的大多数示例中,我发现人们使用 mesh.material 访问 material 属性。出于某种原因,这对我来说不是一个选择,所以我就是这样做的:
import { useGLTF, useTexture } from 'drei';
import * as THREE from "three";
const gltfModel = useGLTF(modelConfig.path.meshes, true);
const mesh = gltfModel.scene.getObjectByName("Floor")
const texture = new THREE.TextureLoader().load(img);
const material = new THREE.MeshBasicMaterial({
map: texture,
});
mesh['material'] = material;
mesh['material'].needsUpdate = true;