Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

67
Visualizações
Cómo limitar la distancia de panoramización en reaccionar tres MapControls de fibra

Estoy usando React Three Fiber y drei . Me pregunto cómo limitar la distancia máxima de desplazamiento con MapControls . Hay algunas soluciones en línea sobre cómo archivarlo con three.js simples, pero nada con MapControls u OrbitControls de drei y r3f .

Intenté esto, pero una vez que llegué al límite, la cámara falla extrañamente.

 function Controls() { const { camera } = useThree(); useFrame(() => { camera.position.x = THREE.MathUtils.clamp(camera.position.x, -90, 90) camera.position.y = THREE.MathUtils.clamp(camera.position.y, -90, 90) }) return ( <MapControls /> ) }

Gracias por tu ayuda

Alejandro

about 4 years ago · Juan Pablo Isaza
2 Respostas
Responde à pergunta

0

Aquí está mi solución con el uso de la propiedad onChange de MapControls .

Componente de controles:

 import React, { useRef } from 'react' import { MapControls } from '@react-three/drei' import { useThree } from '@react-three/fiber' const Controls = () => { const { camera } = useThree() const cameraLastPosition = useRef({ x: camera.position.x, y: camera.position.y, }) return ( <MapControls onChange={(e) => { const maxX = 90 const minX = -90 const maxY = 90 const minY = -90 const x = e?.target.target.x const y = e?.target.target.y if (x < minX || x > maxX) { e?.target.target.setX(x < minX ? minX : maxX) camera.position.setX(cameraLastPosition.current.x) } if (y < minY || y > maxY) { e?.target.target.setY(y < minY ? minY : maxY) camera.position.setY(cameraLastPosition.current.y) } cameraLastPosition.current.x = camera.position.x cameraLastPosition.current.y = camera.position.y }} /> ) } export default Controls

Importa ese componente y úsalo en tu Canvas :

 <Canvas> <Controls /> </Canvas>
about 4 years ago · Juan Pablo Isaza Relatório

0

Según esta respuesta, una solución sería crear un componente personalizado 'Controls' con este aspecto.

 const Controls = () => { const { camera } = useThree() const controlsRef = useRef() useEffect(() => { controlsRef.current.addEventListener('change', function () { if (this.target.y < -10) { this.target.y = -10 camera.position.y = -10 } else if (this.target.y > 10) { this.target.y = 10 camera.position.y = 10 } }) }, []) return ( <MapControls ref={controlsRef} enableZoom={false} enableRotate={false} /> ) }

Que luego se puede usar como elemento secundario del componente Canvas .

 <Canvas> <Controls /> </Canvas>
about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda