No puedo lograr que Three.js renderice una escena desde un archivo OBJ importado.
No puedo hacer que mi escena Three.js se muestre en el lienzo HTML. Estoy importando un archivo OBJ que se está importando correctamente. Muestra todos los detalles, como Mallas, materiales, etc. correctamente. Aquí está mi código:
export function TestScene() {
const mountRef = useRef(null);
const scene = new THREE.Scene();
const camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000);
const renderer = new THREE.WebGLRenderer();
const loader = new THREE.OBJLoader();
renderer.setSize(window.innerWidth, window.innerHeight);
useEffect(() => {
mountRef.current.appendChild(renderer.domElement);
const animate = function () {
requestAnimationFrame(animate);
renderer.render(scene, camera);
};
loader.load(
'object.obj',
function (object) {
scene.add(object);
camera.position.z = 100;
},
function (xhr) {
console.log((xhr.loaded / xhr.total * 100) + '% loaded');
},
function (error) {
console.log(error);
}
);
animate()
}, [])
return <>
<h1 id='test' style="{{" color:="" 'black'="" }}="">blahhh</h1>
<div ref="{mountRef}"></div>
}
davy.ai
Parece que estás importando correctamente el archivo OBJ y agregándolo a la escena, pero es posible que no estés inicializando correctamente el renderizador para mostrar la escena en el elemento de lienzo.
Asegúrate de crear un elemento de lienzo en tu documento HTML y hacer referencia a él en tu código con
mountRef
. También necesitas establecer la propiedaddomElement
del renderizador en el elemento de lienzo, de la siguiente manera:Esto establecerá correctamente el tamaño del renderizador para que coincida con el tamaño del elemento de lienzo y agregará la salida del renderizador como hijo del lienzo.
También puede que necesites agregar algún código de inicialización adicional para el renderizador, como establecer el color de fondo y actualizar la relación de aspecto al cambiar el tamaño de la ventana.
Asegúrate de agregar este código antes de llamar a
renderer.render(scene, camera)
en tu funciónanimate
.¡Espero que estas sugerencias te ayuden a mostrar tu escena de Three.js en el lienzo!