three.js从入门到精通系列教程041 - 使用全景图设置场景背景,通过立方相机CubeCamera查看室内全景

本文详细介绍了如何在three.js中使用全景图作为场景背景,并通过立方相机实现室内环境的360度查看,同时展示了如何创建环境光源和动态更新环境贴图。
摘要由CSDN通过智能技术生成
<!DOCTYPE html>
<html>

<head>
    <meta charset="UTF-8">
    <title>three.js从入门到精通系列教程041 - 使用全景图设置场景背景,通过立方相机CubeCamera查看室内全景</title>
    <script src="ThreeJS/three.js"></script>
    <script src="ThreeJS/jquery.js"></script>
</head>

<body>
    <center id="myContainer"></center>
    <script>
        var myCubeCamera, myCamera, myScene, myRenderer;
        var lon = 0, lat = 0, phi = 0, theta = 0;
        var myTextureLoader = new THREE.TextureLoader();
        myTextureLoader.load('images/img054.jpg', function (myTexture) {
            init(myTexture);
            animate();
        });
        function init(myTexture) {
            //创建渲染器
            myRenderer = new THREE.WebGLRenderer({ antialias: true });
            myRenderer.setSize(window.innerWidth, window.innerHeight);
            $("#myContainer").append(myRenderer.domElement);
            myCamera = new THREE.PerspectiveCamera(60,
                window.innerWidth / window.innerHeight, 1, 1000);
            myScene = new THREE.Scene();
            //使用全景图设置场景背景
            myScene.background = new THREE.WebGLCubeRenderTarget(1024)
                .fromEquirectangularTexture(myRenderer, myTexture);
            //创建环境光
            var myAmbientLight = new THREE.AmbientLight('white');
            myScene.add(myAmbientLight);
            //创建两个聚光灯光源
            var mySpotLight1 = new THREE.SpotLight('white');
            mySpotLight1.position.set(600, 600, 600);
            myScene.add(mySpotLight1);
            var mySpotLight2 = new THREE.SpotLight('white');
            mySpotLight2.position.set(-600, -600, -600);
            myScene.add(mySpotLight2);
            var myCubeRenderTarget = new THREE.WebGLCubeRenderTarget(256,
                {
                    format: THREE.RGBFormat, generateMipmaps: true,
                    minFilter: THREE.LinearMipmapLinearFilter
                });
            //创建THREE.CubeCamera全景照相机
            myCubeCamera = new THREE.CubeCamera(1, 400, myCubeRenderTarget);
            //使用全景照相机拍摄的环境贴图创建MeshLambertMaterial
            var myMeshLambertMaterial = new THREE.MeshLambertMaterial(
                { envMap: myCubeRenderTarget.texture });
            var myMesh = new THREE.Mesh(
                new THREE.SphereGeometry(34, 100, 100), myMeshLambertMaterial);
            myScene.add(myMesh);
        }
        function animate() {
            requestAnimationFrame(animate);
            //更新环境贴图(全景照相机不停地拍照)
            myCubeCamera.update(myRenderer, myScene);
            lon += 0.35;
            lat = Math.max(- 85, Math.min(85, lat));
            phi = THREE.MathUtils.degToRad(90 - lat);
            theta = THREE.MathUtils.degToRad(lon);
            myCamera.position.x = 100 * Math.sin(phi) * Math.cos(theta);
            myCamera.position.y = 100 * Math.cos(phi);
            myCamera.position.z = 100 * Math.sin(phi) * Math.sin(theta);
            myCamera.lookAt(myScene.position);
            myRenderer.render(myScene, myCamera);
        }
    </script>
</body>

</html>

  • 11
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

smartsmile2012

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值