THREE.js学习笔记5——FullScreen and Resizing

这一小节学习Fullscreen and Resizing
将THREE.js渲染的结果铺满整个屏幕,以及避免出现蓝色边框和超过画面限制的滚动

renderer.setSize(window.innerWidth, window.innerHeight)

* {
  padding: 0;
  margin: 0;
}
body {
    overflow: hidden;
}

.test {
    position: fixed;
    top: 0;
    left: 0;
    outline: none;
}

解决画面大小更新之后,THREE.js渲染的画面不会自动刷新的问题。

const sizes = {
    width: window.innerWidth,
    height: window.innerHeight
}
addEventListener('resize', (event) => {
    //更新宽高
    sizes.width = window.innerWidth;
    sizes.height = window.innerHeight;
    //更新相机
    camera.aspect = sizes.width / sizes.height;
    //重新渲染
    camera.updateProjectionMatrix();
    renderer.setSize(sizes.width, sizes.height)
})

解决像素比

有时候我发现我渲染出来的立方体具有锯齿状的边缘,如何解决?
如果在边缘看到模糊的渲染,是因为在像素比大于1的屏幕上进行测试。
像素比就是一个像素单位在屏幕上有多少物理像素。
要获取当前设备的像素比,我们可以使用window.devicePixelRatio,要相应更新渲染器,我们可以使用renderer.setPixelRatio(...)

//更改像素比
const PixeRatio = window.devicePixelRatio;
renderer.setPixelRatio(devicePixelRatio)

如果在一些像素比达到了5以上的显示器上运行这段代码,就会有些卡顿,可以以像素比2为限制

renderer.setPixelRatio(Math.min(PixeRatio, 2))

同时,也可以将这两行代码放入resize函数中,以便于适应有多个屏幕同时使用的情况

addEventListener('resize', (event) => {
    //更新宽高
    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))
})

双击进入全屏

添加双击事件监听器
要进入全屏模式,请在相关内容上使用requestFullscreen(),也就是<canvas>元素
退出全屏,则使用document.exitFullscreen()

addEventListener('dblclick', (event) => {
    const testDiv = document.querySelector('.test');
    if (!document.fullscreenElement && testDiv) {
        testDiv.requestFullscreen()
    } else {
        document.exitFullscreen()
    }
})
posted @   xxxichenjq  阅读(7)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示