我正在使用Nextjs和3D库(如Three和React-Three)开发一个投资组合应用程序。
我使用Vercel部署应用程序。
我遇到了一个问题,即在Android手机上部署的应用程序中,3D模型显示为空白白色正方形:
Xiaomi red mi note 7 / MI浏览器
Samsung s10 / chrome浏览器。
这个问题有解决办法吗?
已部署网站:https://portfolio2-nu-ruddy.vercel.app/
Git Repo:https://github.com/ItayTur/Portfolio
3D模型组件:
import { GLTFLoader } from "three/examples/jsm/loaders/GLTFLoader";
import { useLoader, Canvas } from "@react-three/fiber";
import { Suspense, useEffect, useState } from "react";
import { OrbitControls, Preload } from "@react-three/drei";
import Loader from "./Loader";
const Computers = ({ isMobile = false }) => {
const gltf = useLoader(GLTFLoader, "/desktop_pc/scene.gltf");
return (
<mesh>
<hemisphereLight intensity={0.15} groundColor="black" />
<pointLight intensity={1} />
<spotLight
position={[-20, 50, 10]}
angle={0.12}
penumbra={1}
intensity={1}
castShadow
shadow-mapSize={1024}
/>
<primitive
scale={isMobile ? 0.7 : 0.75}
position={isMobile ? [0, -3, -2.2] : [0, -3.25, -1.5]}
rotation={[-0.01, -0.2, -0.1]}
object={gltf.scene}
/>
</mesh>
);
};
const ComputersCanvas = () => {
const [isMobile, setIsMobile] = useState(false);
useEffect(() => {
const mediaQuery = window.matchMedia("(max-width: 500px)");
setIsMobile(mediaQuery.matches);
const onMediaQueryChange = (event: MediaQueryListEvent) => {
setIsMobile(event.matches);
};
mediaQuery.addEventListener("change", onMediaQueryChange);
return () => {
mediaQuery.removeEventListener("change", onMediaQueryChange);
};
}, []);
return (
<Canvas
frameloop="demand"
shadows
camera={{ position: [20, 3, 5], fov: 25 }}
gl={{ preserveDrawingBuffer: true }}
>
<Suspense fallback={<Loader />}>
<OrbitControls
enableZoom={false}
maxPolarAngle={Math.PI / 2}
minPolarAngle={Math.PI / 2}
/>
<Computers isMobile={isMobile} />
</Suspense>
<Preload all />
</Canvas>
);
};
export default ComputersCanvas;