You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

点击窗口最大化图标时three.js场景更新失效问题求助

问题原因及修复方案
  • 核心问题:代码执行顺序错误
    你在resize事件里先调用了camera.updateProjectionMatrix(),之后才设置camera.aspect,这会导致投影矩阵更新时用的还是旧的宽高比,最大化窗口时自然会出现画面变形。错误的状态还可能引发渲染循环异常中断。

  • 修复后的resize事件代码

    // resize
    window.addEventListener('resize', () => {
      sizes.width = window.innerWidth
      sizes.height = window.innerHeight
    
      // 先更新相机宽高比,再更新投影矩阵
      camera.aspect = sizes.width / sizes.height
      camera.updateProjectionMatrix()
    
      // 更新渲染器尺寸,同时设置像素比避免高DPI屏幕模糊
      renderer.setSize(sizes.width, sizes.height)
      renderer.setPixelRatio(Math.min(window.devicePixelRatio, 2))
    })
    
  • 额外优化建议

    • 给resize事件添加防抖处理,避免窗口快速调整时频繁触发更新操作:
      let resizeTimeout
      window.addEventListener('resize', () => {
        clearTimeout(resizeTimeout)
        resizeTimeout = setTimeout(() => {
          sizes.width = window.innerWidth
          sizes.height = window.innerHeight
          camera.aspect = sizes.width / sizes.height
          camera.updateProjectionMatrix()
          renderer.setSize(sizes.width, sizes.height)
          renderer.setPixelRatio(Math.min(window.devicePixelRatio, 2))
        }, 50)
      })
      
    • 可以在渲染循环中添加简单日志,排查是否有代码抛出错误导致requestAnimationFrame停止调用:
      const loop = () => {
        console.log('render loop running')
        renderer.render(scene, camera)
        window.requestAnimationFrame(loop)
      }
      loop();
      

内容的提问来源于stack exchange,提问作者Bobby Three

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 07:54:58