zoukankan      html  css  js  c++  java
  • three.js光源

    在Threejs中,光源用Light表示,它是所有光源的基类。它的构造函数是:

    THREE.Light ( hex )

    它有一个参数hex,接受一个16进制的颜色值。例如要定义一种红色的光源,我们可以这样来定义:

    Var redLight = new THREE.Light(0xFF0000);

    Three.js内置了多种光源可以直接调用:

    • AmbientLight(环境光)
    • AreaLight(区域光)
    • DirectionalLight(平行光)
    • HemisphereLight(半球光)
    • PointLight(点光源)
    • SpotLight(聚光灯)
    <!DOCTYPE html>
    
    <html>
    
    <head>
    
        <meta charset="UTF-8">
    
        <title>我的第一个WebGL程序</title>
    
        <style>body { margin: 0; overflow: hidden; }; canvas { width: 100%;  height: 100%; }</style>
    
    </head>
    
    <body>
    
        <script src="libs/three.js"></script>
    
        <script>
    
            //创建场景
    
            var scene = new THREE.Scene();
    
            //创建摄影机
    
            var camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 1, 1000);
    
            camera.position.set(100, 100, 100);
    
            camera.lookAt(scene.position);
    
            //创建绿色立方体
    
            var box = new THREE.Mesh(
    
                new THREE.CubeGeometry(5, 5, 40),
    
                new THREE.MeshLambertMaterial({
    
                    color: 0x00ff00
    
                }));
    
            box.position.set(10, 20, 10);
    
            scene.add(box);
    
            //创建红色地面
    
            var ground = new THREE.Mesh(
    
                new THREE.CubeGeometry(100, 1, 100),
    
                new THREE.MeshLambertMaterial({
    
                    color: 0xff0000,
    
                }));
    
            ground.position.set(0, 5, 0);
    
            ground.receiveShadow = true;
    
            scene.add(ground);
    
            //创建渲染器并把设置背景为蓝色
    
            var renderer = new THREE.WebGLRenderer();
    
            renderer.setSize(window.innerWidth, window.innerHeight);
    
            renderer.setClearColor(0x0000ff, 1);
    
            document.body.appendChild(renderer.domElement);
    
            
    
            //渲染画面
    
            renderer.render(scene, camera);
    
        </script>
    
    </body>
    
    </html>

    现在运行页面,我们只能看到蓝色的背景和一块黑色的几何体,因为我们还没有加入灯光,所以一切的物体都是黑色的。立方体和地面的材质均为MeshLambertMaterial(类似纸张,可以均匀反射接收到的光线)。

    <!DOCTYPE html>
    
    <html>
    
    <head>
    
        <meta charset="UTF-8">
    
        <title>我的第一个WebGL程序</title>
    
        <style>body { margin: 0; overflow: hidden; }; canvas { width: 100%;  height: 100%; }</style>
    
    </head>
    
    <body>
    
        <script src="libs/three.js"></script>
    
        <script>
    
            //创建场景
    
            var scene = new THREE.Scene();
    
            //创建摄影机
    
            var camera = new THREE.PerspectiveCamera(45, window.innerWidth / window.innerHeight, 1, 10000);
    
            camera.position.set(300, 300, 300);
    
            //创建绿色立方体
    
            var box = new THREE.Mesh(
    
                new THREE.CubeGeometry(5, 5, 40),
    
                new THREE.MeshLambertMaterial({
    
                    color: 0x00ff00
    
                }));
    
            box.position.set(0, 15, 0);
    
            box.castShadow = true;
    
            scene.add(box);
    
            //创建红色地面
    
            var ground = new THREE.Mesh(
    
                new THREE.CubeGeometry(200, 1, 200),
    
                new THREE.MeshLambertMaterial({
    
                    color: 0xff0000,
    
                }));
    
            ground.receiveShadow = true;
    
            scene.add(ground);
    
            //创建渲染器并把设置背景为蓝色
    
            var renderer = new THREE.WebGLRenderer();
    
            renderer.setSize(window.innerWidth, window.innerHeight);
    
            renderer.setClearColor(0x0000ff);
    
            renderer.shadowMapEnabled = true;
    
            document.body.appendChild(renderer.domElement);
    
            //添加聚光灯
    
            var light = new THREE.SpotLight( 0xffffff, 3 );
    
            light.position.set( 100, 200, 50 );
    
            light.castShadow = true;        
    
            light.shadowCameraNear = 50;
    
            light.shadowCameraFar = 300;
    
            light.shadowCameraFov = 30;
    
            
    
            scene.add( light );
    
            //渲染画面
    
            var render = function() {
    
                requestAnimationFrame(render);
    
                
    
                box.rotation.y += 0.01;
    
                ground.rotation.y += 0.01;
    
                
    
                camera.lookAt(scene.position);
    
                renderer.render(scene, camera);
    
            };
    
            render();
    
        </script>
    
    </body>
    
    </html>

    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="UTF-8">
            <title>Three框架</title>
            <script src="libs/three.js"></script>
            <style type="text/css">
                div#canvas-frame {
                    border: none;
                    cursor: pointer;
                    width: 100%;
                    height: 600px;
                    background-color: #EEEEEE;
                }
    
            </style>
            <script>
                var renderer;
                function initThree() {
                    width = document.getElementById('canvas-frame').clientWidth;
                    height = document.getElementById('canvas-frame').clientHeight;
                    renderer = new THREE.WebGLRenderer({
                        antialias : true
                    });
                    renderer.setSize(width, height);
                    document.getElementById('canvas-frame').appendChild(renderer.domElement);
                    renderer.setClearColor(0xFFFFFF, 1.0);
                }
    
                var camera;
                function initCamera() {
                    camera = new THREE.PerspectiveCamera(45, width / height, 1, 10000);
                    camera.position.x = 600;
                    camera.position.y = 0;
                    camera.position.z = 600;
                    camera.up.x = 0;
                    camera.up.y = 1;
                    camera.up.z = 0;
                    camera.lookAt({
                        x : 0,
                        y : 0,
                        z : 0
                    });
                }
    
                var scene;
                function initScene() {
                    scene = new THREE.Scene();
                }
    
                var light;
                function initLight() {
                }
    
                var cube;
                function initObject() {
                    var geometry = new THREE.CubeGeometry( 200, 100, 50,4,4);
                    var material = new THREE.MeshLambertMaterial( { color:0xFFFFFF} );
                    var mesh = new THREE.Mesh( geometry,material);
                    mesh.position = new THREE.Vector3(0,0,0);
                    scene.add(mesh);
                }
    
                function threeStart() {
                    initThree();
                    initCamera();
                    initScene();
                    initLight();
                    initObject();
                    renderer.clear();
                    renderer.render(scene, camera);
                }
    
            </script>
        </head>
    
        <body onload="threeStart();">
            <div id="canvas-frame"></div>
        </body>
    </html>

      <!DOCTYPE html>
    <html>
        <head>
            <meta charset="UTF-8">
            <title>Three框架</title>
            <script src="libs/three.js"></script>
            <style type="text/css">
                div#canvas-frame {
                    border: none;
                    cursor: pointer;
                    width: 100%;
                    height: 600px;
                    background-color: #EEEEEE;
                }
    
            </style>
            <script>
                var renderer;
                function initThree() {
                    width = document.getElementById('canvas-frame').clientWidth;
                    height = document.getElementById('canvas-frame').clientHeight;
                    renderer = new THREE.WebGLRenderer({
                        antialias : true
                    });
                    renderer.setSize(width, height);
                    document.getElementById('canvas-frame').appendChild(renderer.domElement);
                    renderer.setClearColor(0xFFFFFF, 1.0);
                }
    
                var camera;
                function initCamera() {
                    camera = new THREE.PerspectiveCamera(45, width / height, 1, 10000);
                    camera.position.x = 600;
                    camera.position.y = 0;
                    camera.position.z = 600;
                    camera.up.x = 0;
                    camera.up.y = 1;
                    camera.up.z = 0;
                    camera.lookAt({
                        x : 0,
                        y : 0,
                        z : 0
                    });
                }
    
                var scene;
                function initScene() {
                    scene = new THREE.Scene();
                }
    
                var light;
                function initLight() {
                // A start
                    light = new THREE.AmbientLight(0xFF0000);
                    light.position.set(100, 100, 200);
                    scene.add(light);
                // A end
    
                }
    
                var cube;
                function initObject() {
                    var geometry = new THREE.CubeGeometry( 200, 100, 50,4,4);
                    // B start
                    var material = new THREE.MeshLambertMaterial( { color:0x880000} );
                    // B end
                    var mesh = new THREE.Mesh( geometry,material);
                    mesh.position = new THREE.Vector3(0,0,0);
                    scene.add(mesh);
                }
    
                function threeStart() {
                    initThree();
                    initCamera();
                    initScene();
                    initLight();
                    initObject();
                    renderer.clear();
                    renderer.render(scene, camera);
                }
    
            </script>
        </head>
    
        <body onload="threeStart();">
            <div id="canvas-frame"></div>
        </body>
    </html>
      <!DOCTYPE html>
    <html>
        <head>
            <meta charset="UTF-8">
            <title>Three框架</title>
            <script src="libs/three.js"></script>
            <style type="text/css">
                div#canvas-frame {
                    border: none;
                    cursor: pointer;
                    width: 100%;
                    height: 600px;
                    background-color: #EEEEEE;
                }
    
            </style>
            <script>
                var renderer;
                function initThree() {
                    width = document.getElementById('canvas-frame').clientWidth;
                    height = document.getElementById('canvas-frame').clientHeight;
                    renderer = new THREE.WebGLRenderer({
                        antialias : true
                    });
                    renderer.setSize(width, height);
                    document.getElementById('canvas-frame').appendChild(renderer.domElement);
                    renderer.setClearColor(0xFFFFFF, 1.0);
                }
    
                var camera;
                function initCamera() {
                    camera = new THREE.PerspectiveCamera(45, width / height, 1, 10000);
                    camera.position.x = 600;
                    camera.position.y = 0;
                    camera.position.z = 600;
                    camera.up.x = 0;
                    camera.up.y = 1;
                    camera.up.z = 0;
                    camera.lookAt({
                        x : 0,
                        y : 0,
                        z : 0
                    });
                }
    
                var scene;
                function initScene() {
                    scene = new THREE.Scene();
                }
    
                var light;
                function initLight() {
                // A start
                    light = new THREE.AmbientLight(0xFF0000);
                    light.position.set(100, 100, 200);
                    scene.add(light);
                // A end
    
                }
    
                var cube;
                function initObject() {
                    var geometry = new THREE.CubeGeometry( 200, 100, 50,4,4);
                    // B start
                    var material = new THREE.MeshLambertMaterial( { color:0x880000} );
                    // B end
                    var mesh = new THREE.Mesh( geometry,material);
                    mesh.position = new THREE.Vector3(0,0,0);
                    scene.add(mesh);
                }
    
                function threeStart() {
                    initThree();
                    initCamera();
                    initScene();
                    initLight();
                    initObject();
                    renderer.clear();
                    renderer.render(scene, camera);
                }
    
            </script>
        </head>
    
        <body onload="threeStart();">
            <div id="canvas-frame"></div>
        </body>
    </html>

  • 相关阅读:
    Reddit 转载 Drunk Post: Things I've learned as a Sr Engineer
    算法28 30 二叉树非递归遍历(前中后)
    C++ 子类构造函数初始化列表与基类关系
    算法31 leetcode102 二叉树的层序遍历
    C++由数组构建二叉树指针
    windows下编译源代码安装软件
    算法27 leetcode101 对称二叉树
    算法31 88. 合并两个有序数组
    c++:const修饰指针
    c++ 正则实现 千分位分割
  • 原文地址:https://www.cnblogs.com/Yimi/p/6016862.html
Copyright © 2011-2022 走看看