Three添加天空盒子

简介: 这篇文章详细说明了如何在Three.js中添加天空盒(Skybox)以增强3D场景的真实感和沉浸体验。

这里将一下,在threejs的场景中通过设置天空盒子给场景添加真实性,天空盒子听名字就知道就是做一个盒子一样的天空,原理就是给scene的场景添加图片,使之看起来像天空的样子,因为场景有6个面,所以需要6个图片,分别是前后左右上下,加载图片后设置到scene中,就可以实现,下面是代码,代码中有详细的注释

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <!--引入three.js,这是使用three必须的js文件,此处引入的是外网提供的three文件,如果引入有问题可以到官网下载three文件后引入本地的theee.js文件-->
    <script src="./ThreeJs/js/three.js"></script>
    <script src="./ThreeJs/js/OrbitControls.js"></script>
</head>

<body>
<div id="container" style="width:100%;height:100%"></div>
<script>
    /**
     * 创建场景对象Scene
     */
    var scene = new THREE.Scene();

    /**
     * 相机设置
     */
    //窗口宽度
    var width = window.innerWidth;
    //窗口高度
    var height = window.innerHeight;
    //窗口宽高比
    var k = width / height;
    //三维场景显示范围控制系数,系数越大,显示的范围越大
    var s = 200;
    //创建相机对象
    //var camera = new THREE.OrthographicCamera(-s * k, s * k, s, -s, 0.1, 1000);
    var camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000);
    //设置相机位置
    camera.position.set(2, 3, 2);
    //设置相机方向(指向的场景对象)
    camera.lookAt(scene.position);

    /**
     * 光源设置
     */
   //新建点光源(常用光源分为点光源和环境光,点光源的效果类似灯泡,环境光的效果类似白天的太阳光)
    var point = new THREE.PointLight(0xffffff);
    //设置点光源的位置
    point.position.set(40, 20, 30);
    //将点光源添加到场景中
    scene.add(point);

    /**
     * 创建渲染器对象
     */
    //创建渲染器对象(渲染要等所有东西都加进去再渲染场景,创建和3D模型和光源没有先后顺序)
    var renderer = new THREE.WebGLRenderer();
    //设置渲染区域尺寸(设置的是整个屏幕的长度和宽度
    renderer.setSize(width, height);
    //body元素中插入canvas对象,也可以在页面中添加div,并加上id,通过id指定在某个div中渲染
    let container = document.getElementById("container")
    container.appendChild(renderer.domElement);

    //创建鼠标控制器    
    let controls = new THREE.OrbitControls(camera, renderer.domElement );
    //监听控制器,每次拖动后重新渲染画面
    controls.addEventListener('change', function () {
        renderer.render(scene, camera); //执行渲染操作
    });

    /*
        加载天空盒子
    */
    // 创建一个CubeTextureLoader
    var loader = new THREE.CubeTextureLoader();
    // 设置天空盒子的路径和格式
    var texture = loader.load([
        'images/posx.jpg', // 右侧面的图像
        'images/negx.jpg', // 左侧面的图像
        'images/posy.jpg', // 顶部面的图像
        'images/negy.jpg', // 底部面的图像
        'images/posz.jpg', // 前侧面的图像
        'images/negz.jpg' // 后侧面的图像
    ]);
    //设置scene的场景为此贴图
    scene.background = texture

    //添加一个正方体方便演示
    let geometry = new THREE.BoxGeometry();
    let material = new THREE.MeshBasicMaterial({ color: 0x00ff00 });
    let cube = new THREE.Mesh(geometry, material);
    scene.add(cube);

    //循环渲染
    function render() {
        //执行渲染操作   指定场景、相机作为参数
        renderer.render(scene, camera);
        // 使用 requestAnimationFrame 函数安排下一次渲染
        requestAnimationFrame(render);
        //修改正方体网格的x轴旋转角度
    }
    render()
</script>
</body>
</html>

效果图1693473392449.jpg

以上如果有问题可以在评论区留言,

相关文章
Threejs实现天空盒,全景场景,地面草地
Threejs实现天空盒,全景场景,地面草地
1757 0
Threejs实现天空盒,全景场景,地面草地
Threejs创建天空和太阳
这篇文章讲解了如何使用Three.js中的Sky组件来创建真实的天空与太阳效果,包括调整天空的颜色、太阳的位置以及实现大气散射等技巧。
448 3
Threejs实现相机视角切换,平滑过渡,点击模型切换到查看模型视角
Threejs实现相机视角切换,平滑过渡,点击模型切换到查看模型视角
2642 0
Threejs实现相机视角切换,平滑过渡,点击模型切换到查看模型视角
Threejs实现下雨,下雪,阴天,晴天,火焰
Threejs实现下雨,下雪,阴天,晴天,火焰
2430 0
Threejs实现下雨,下雪,阴天,晴天,火焰
Threejs实现模拟管道液体流动
Threejs实现模拟管道液体流动
3152 0
Threejs实现模拟管道液体流动
|
数据可视化 定位技术
three.js实现烟雾缭绕效果
前言 大家好!我是Fly哥,最近接广告的接的有点多, 感谢大家还是一如既往的支持我!respect, 前几天我在朋友圈分享了一个烟雾缭绕的效果。很多小伙伴都表示非常感兴趣,有的同学说用到了噪声, 有的同学说用到了着色器,还有更过分说用到了ps, 胖虎竟然无语凝噎。其实都是就是简单的贴图。配合一点想象力。我们先看下效果: 然后我就发了一条朋友圈,问这个像什么?? 有的说 云层, 有的说云墨,有的说雾霭, 其实都不是, 我想做的是烟雾。好的话不不多说!, 本篇文章阅读大概5分钟。不耽误大家太多时间,主要是介绍思路, 说太多也没啥意义。如果你对three.js 还没有一点了解都没有,
three.js实现烟雾缭绕效果
ThreeJs制作管道中水流效果
这篇文章详细介绍了如何在Three.js中创建具有动态水流效果的管道模型,通过纹理贴图的移动来模拟水流的视觉效果。
835 2
ThreeJs制作管道中水流效果
Cesium添加3DTile
这篇文章介绍了如何在Cesium中添加3DTile内容,以增强三维地理空间数据的表现,并提供了实现的具体步骤和代码示例。
339 1
Cesium添加3DTile
|
开发框架
threejs做特效:实现物体的发光效果-EffectComposer详解!
【8月更文挑战第7天】实现物体的发光效果-EffectComposer详解!
1990 6
threejs做特效:实现物体的发光效果-EffectComposer详解!
|
JavaScript
ThreeJs通过DragControls实现物体拖动
这篇文章详细讲解了如何在Three.js中使用DragControls实现3D物体的鼠标拖动功能。
470 1
ThreeJs通过DragControls实现物体拖动