国产精品爱久久久久久久小说,女人扒开腿让男人桶到爽 ,亚洲欧美国产双大乳头,国产成人精品综合久久久久,国产精品制服丝袜无码,免费无码精品黄av电影,黑色丝袜无码中中文字幕,乱熟女高潮一区二区在线

            好看的圣誕樹(動態效果) 轉自 csdn

            2023-12-25    前端達人

            、制作方法 

            1.復制代碼到Dreamweaver或HBuilder或vscode中

            2.點擊運行---運行到瀏覽器---選擇你要打開的瀏覽器

            3.打開后會出現這個界面,前四個是固定音樂,最后一個是自主選擇的音樂,你可以選擇你電腦上的歌曲,什么歌曲都行(第一次打開可能會有點慢,稍等片刻即可,選擇音樂的時候點一下沒反應的話多點幾下即可,第一次打開這屬于正常現象)

             

            4.特別提醒:打開的時候電腦一定要處于聯網狀態
             

            三、源代碼

             
            1.  
              <!DOCTYPE html>
            2.  
              <html lang="en">
            3.  
               
            4.  
              <head>
            5.  
              <meta charset="UTF-8">
            6.  
               
            7.  
              <title>圣誕樹</title>
            8.  
               
            9.  
              <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/normalize/5.0.0/normalize.min.css">
            10.  
               
            11.  
              <style>
            12.  
              * {
            13.  
              box-sizing: border-box;
            14.  
              }
            15.  
               
            16.  
               
            17.  
              body {
            18.  
              margin: 0;
            19.  
              height: 100vh;
            20.  
              overflow: hidden;
            21.  
              display: flex;
            22.  
              align-items: center;
            23.  
              justify-content: center;
            24.  
              background: #161616;
            25.  
              color: #c5a880;
            26.  
              font-family: sans-serif;
            27.  
              }
            28.  
               
            29.  
               
            30.  
              label {
            31.  
              display: inline-block;
            32.  
              background-color: #161616;
            33.  
              padding: 16px;
            34.  
              border-radius: 0.3rem;
            35.  
              cursor: pointer;
            36.  
              margin-top: 1rem;
            37.  
              width: 300px;
            38.  
              border-radius: 10px;
            39.  
              border: 1px solid #c5a880;
            40.  
              text-align: center;
            41.  
              }
            42.  
               
            43.  
               
            44.  
              ul {
            45.  
              list-style-type: none;
            46.  
              padding: 0;
            47.  
              margin: 0;
            48.  
              }
            49.  
               
            50.  
               
            51.  
              .btn {
            52.  
              background-color: #161616;
            53.  
              border-radius: 10px;
            54.  
              color: #c5a880;
            55.  
              border: 1px solid #c5a880;
            56.  
              padding: 16px;
            57.  
              width: 300px;
            58.  
              margin-bottom: 16px;
            59.  
              line-height: 1.5;
            60.  
              cursor: pointer;
            61.  
              }
            62.  
               
            63.  
              .separator {
            64.  
              font-weight: bold;
            65.  
              text-align: center;
            66.  
              width: 300px;
            67.  
              margin: 16px 0px;
            68.  
              color: #a07676;
            69.  
              }
            70.  
               
            71.  
               
            72.  
              .title {
            73.  
              color: #a07676;
            74.  
              font-weight: bold;
            75.  
              font-size: 1.25rem;
            76.  
              margin-bottom: 16px;
            77.  
              }
            78.  
               
            79.  
               
            80.  
              .text-loading {
            81.  
              font-size: 2rem;
            82.  
              }
            83.  
              </style>
            84.  
               
            85.  
              <script>
            86.  
              window.console = window.console || function (t) { };
            87.  
              </script>
            88.  
               
            89.  
               
            90.  
               
            91.  
              <script>
            92.  
              if (document.location.search.match(/type=embed/gi)) {
            93.  
              window.parent.postMessage("resize", "*");
            94.  
              }
            95.  
              </script>
            96.  
               
            97.  
               
            98.  
              </head>
            99.  
               
            100.  
              <body translate="no">
            101.  
              <script src="https://cdn.jsdelivr.net/npm/three@0.115.0/build/three.min.js"></script>
            102.  
              <script src="https://cdn.jsdelivr.net/npm/three@0.115.0/examples/js/postprocessing/EffectComposer.js"></script>
            103.  
              <script src="https://cdn.jsdelivr.net/npm/three@0.115.0/examples/js/postprocessing/RenderPass.js"></script>
            104.  
              <script src="https://cdn.jsdelivr.net/npm/three@0.115.0/examples/js/postprocessing/ShaderPass.js"></script>
            105.  
              <script src="https://cdn.jsdelivr.net/npm/three@0.115.0/examples/js/shaders/CopyShader.js"></script>
            106.  
              <script src="https://cdn.jsdelivr.net/npm/three@0.115.0/examples/js/shaders/LuminosityHighPassShader.js"></script>
            107.  
              <script src="https://cdn.jsdelivr.net/npm/three@0.115.0/examples/js/postprocessing/UnrealBloomPass.js"></script>
            108.  
               
            109.  
              <div id="overlay">
            110.  
              <ul>
            111.  
              <li class="title">請選擇音樂</li>
            112.  
              <li>
            113.  
              <button class="btn" id="btnA" type="button">
            114.  
              Snowflakes Falling Down by Simon Panrucker
            115.  
              </button>
            116.  
              </li>
            117.  
              <li><button class="btn" id="btnB" type="button">This Christmas by Dott</button></li>
            118.  
              <li><button class="btn" id="btnC" type="button">No room at the inn by TRG Banks</button></li>
            119.  
              <li><button class="btn" id="btnD" type="button">Jingle Bell Swing by Mark Smeby</button></li>
            120.  
              <li class="separator">或者</li>
            121.  
              <li>
            122.  
              <input type="file" id="upload" hidden />
            123.  
              <label for="upload">Upload File</label>
            124.  
              </li>
            125.  
              </ul>
            126.  
              </div>
            127.  
               
            128.  
              <script id="rendered-js">
            129.  
              const { PI, sin, cos } = Math;
            130.  
              const TAU = 2 * PI;
            131.  
               
            132.  
              const map = (value, sMin, sMax, dMin, dMax) => {
            133.  
              return dMin + (value - sMin) / (sMax - sMin) * (dMax - dMin);
            134.  
              };
            135.  
               
            136.  
              const range = (n, m = 0) =>
            137.  
              Array(n).
            138.  
              fill(m).
            139.  
              map((i, j) => i + j);
            140.  
               
            141.  
              const rand = (max, min = 0) => min + Math.random() * (max - min);
            142.  
              const randInt = (max, min = 0) => Math.floor(min + Math.random() * (max - min));
            143.  
              const randChoise = arr => arr[randInt(arr.length)];
            144.  
              const polar = (ang, r = 1) => [r * cos(ang), r * sin(ang)];
            145.  
               
            146.  
              let scene, camera, renderer, analyser;
            147.  
              let step = 0;
            148.  
              const uniforms = {
            149.  
              time: { type: "f", value: 0.0 },
            150.  
              step: { type: "f", value: 0.0 }
            151.  
              };
            152.  
               
            153.  
              const params = {
            154.  
              exposure: 1,
            155.  
              bloomStrength: 0.9,
            156.  
              bloomThreshold: 0,
            157.  
              bloomRadius: 0.5
            158.  
              };
            159.  
               
            160.  
              let composer;
            161.  
               
            162.  
              const fftSize = 2048;
            163.  
              const totalPoints = 4000;
            164.  
               
            165.  
              const listener = new THREE.AudioListener();
            166.  
               
            167.  
              const audio = new THREE.Audio(listener);
            168.  
               
            169.  
              document.querySelector("input").addEventListener("change", uploadAudio, false);
            170.  
               
            171.  
              const buttons = document.querySelectorAll(".btn");
            172.  
              buttons.forEach((button, index) =>
            173.  
              button.addEventListener("click", () => loadAudio(index)));
            174.  
               
            175.  
               
            176.  
              function init() {
            177.  
              const overlay = document.getElementById("overlay");
            178.  
              overlay.remove();
            179.  
               
            180.  
              scene = new THREE.Scene();
            181.  
              renderer = new THREE.WebGLRenderer({ antialias: true });
            182.  
              renderer.setPixelRatio(window.devicePixelRatio);
            183.  
              renderer.setSize(window.innerWidth, window.innerHeight);
            184.  
              document.body.appendChild(renderer.domElement);
            185.  
               
            186.  
              camera = new THREE.PerspectiveCamera(
            187.  
              60,
            188.  
              window.innerWidth / window.innerHeight,
            189.  
              1,
            190.  
              1000);
            191.  
               
            192.  
              camera.position.set(-0.09397456774197047, -2.5597086635726947, 24.420789670889008);
            193.  
              camera.rotation.set(0.10443543723052419, -0.003827152981119352, 0.0004011488708739715);
            194.  
               
            195.  
              const format = renderer.capabilities.isWebGL2 ?
            196.  
              THREE.RedFormat :
            197.  
              THREE.LuminanceFormat;
            198.  
               
            199.  
              uniforms.tAudioData = {
            200.  
              value: new THREE.DataTexture(analyser.data, fftSize / 2, 1, format)
            201.  
              };
            202.  
               
            203.  
               
            204.  
              addPlane(scene, uniforms, 3000);
            205.  
              addSnow(scene, uniforms);
            206.  
               
            207.  
              range(10).map(i => {
            208.  
              addTree(scene, uniforms, totalPoints, [20, 0, -20 * i]);
            209.  
              addTree(scene, uniforms, totalPoints, [-20, 0, -20 * i]);
            210.  
              });
            211.  
               
            212.  
              const renderScene = new THREE.RenderPass(scene, camera);
            213.  
               
            214.  
              const bloomPass = new THREE.UnrealBloomPass(
            215.  
              new THREE.Vector2(window.innerWidth, window.innerHeight),
            216.  
              1.5,
            217.  
              0.4,
            218.  
              0.85);
            219.  
               
            220.  
              bloomPass.threshold = params.bloomThreshold;
            221.  
              bloomPass.strength = params.bloomStrength;
            222.  
              bloomPass.radius = params.bloomRadius;
            223.  
               
            224.  
              composer = new THREE.EffectComposer(renderer);
            225.  
              composer.addPass(renderScene);
            226.  
              composer.addPass(bloomPass);
            227.  
               
            228.  
              addListners(camera, renderer, composer);
            229.  
              animate();
            230.  
              }
            231.  
               
            232.  
              function animate(time) {
            233.  
              analyser.getFrequencyData();
            234.  
              uniforms.tAudioData.value.needsUpdate = true;
            235.  
              step = (step + 1) % 1000;
            236.  
              uniforms.time.value = time;
            237.  
              uniforms.step.value = step;
            238.  
              composer.render();
            239.  
              requestAnimationFrame(animate);
            240.  
              }
            241.  
               
            242.  
              function loadAudio(i) {
            243.  
              document.getElementById("overlay").innerHTML =
            244.  
              '<div class="text-loading">正在下載音樂,請稍等...</div>';
            245.  
              const files = [
            246.  
              "https://files.freemusicarchive.org/storage-freemusicarchive-org/music/no_curator/Simon_Panrucker/Happy_Christmas_You_Guys/Simon_Panrucker_-_01_-_Snowflakes_Falling_Down.mp3",
            247.  
              "https://files.freemusicarchive.org/storage-freemusicarchive-org/music/no_curator/Dott/This_Christmas/Dott_-_01_-_This_Christmas.mp3",
            248.  
              "https://files.freemusicarchive.org/storage-freemusicarchive-org/music/ccCommunity/TRG_Banks/TRG_Banks_Christmas_Album/TRG_Banks_-_12_-_No_room_at_the_inn.mp3",
            249.  
              "https://files.freemusicarchive.org/storage-freemusicarchive-org/music/ccCommunity/Mark_Smeby/En_attendant_Nol/Mark_Smeby_-_07_-_Jingle_Bell_Swing.mp3"];
            250.  
               
            251.  
              const file = files[i];
            252.  
               
            253.  
              const loader = new THREE.AudioLoader();
            254.  
              loader.load(file, function (buffer) {
            255.  
              audio.setBuffer(buffer);
            256.  
              audio.play();
            257.  
              analyser = new THREE.AudioAnalyser(audio, fftSize);
            258.  
              init();
            259.  
              });
            260.  
               
            261.  
               
            262.  
               
            263.  
               
            264.  
              }
            265.  
               
            266.  
               
            267.  
              function uploadAudio(event) {
            268.  
              document.getElementById("overlay").innerHTML =
            269.  
              '<div class="text-loading">請稍等...</div>';
            270.  
              const files = event.target.files;
            271.  
              const reader = new FileReader();
            272.  
               
            273.  
              reader.onload = function (file) {
            274.  
              var arrayBuffer = file.target.result;
            275.  
               
            276.  
              listener.context.decodeAudioData(arrayBuffer, function (audioBuffer) {
            277.  
              audio.setBuffer(audioBuffer);
            278.  
              audio.play();
            279.  
              analyser = new THREE.AudioAnalyser(audio, fftSize);
            280.  
              init();
            281.  
              });
            282.  
              };
            283.  
               
            284.  
              reader.readAsArrayBuffer(files[0]);
            285.  
              }
            286.  
               
            287.  
              function addTree(scene, uniforms, totalPoints, treePosition) {
            288.  
              const vertexShader = `
            289.  
              attribute float mIndex;
            290.  
              varying vec3 vColor;
            291.  
              varying float opacity;
            292.  
              uniform sampler2D tAudioData;
            293.  
              float norm(float value, float min, float max ){
            294.  
              return (value - min) / (max - min);
            295.  
              }
            296.  
              float lerp(float norm, float min, float max){
            297.  
              return (max - min) * norm + min;
            298.  
              }
            299.  
              float map(float value, float sourceMin, float sourceMax, float destMin, float destMax){
            300.  
              return lerp(norm(value, sourceMin, sourceMax), destMin, destMax);
            301.  
              }
            302.  
              void main() {
            303.  
              vColor = color;
            304.  
              vec3 p = position;
            305.  
              vec4 mvPosition = modelViewMatrix * vec4( p, 1.0 );
            306.  
              float amplitude = texture2D( tAudioData, vec2( mIndex, 0.1 ) ).r;
            307.  
              float amplitudeClamped = clamp(amplitude-0.4,0.0, 0.6 );
            308.  
              float sizeMapped = map(amplitudeClamped, 0.0, 0.6, 1.0, 20.0);
            309.  
              opacity = map(mvPosition.z , -200.0, 15.0, 0.0, 1.0);
            310.  
              gl_PointSize = sizeMapped * ( 100.0 / -mvPosition.z );
            311.  
              gl_Position = projectionMatrix * mvPosition;
            312.  
              }
            313.  
              `;
            314.  
              const fragmentShader = `
            315.  
              varying vec3 vColor;
            316.  
              varying float opacity;
            317.  
              uniform sampler2D pointTexture;
            318.  
              void main() {
            319.  
              gl_FragColor = vec4( vColor, opacity );
            320.  
              gl_FragColor = gl_FragColor * texture2D( pointTexture, gl_PointCoord );
            321.  
              }
            322.  
              `;
            323.  
              const shaderMaterial = new THREE.ShaderMaterial({
            324.  
              uniforms: {
            325.  
              ...uniforms,
            326.  
              pointTexture: {
            327.  
              value: new THREE.TextureLoader().load(`https://assets.codepen.io/3685267/spark1.png`)
            328.  
              }
            329.  
              },
            330.  
               
            331.  
               
            332.  
              vertexShader,
            333.  
              fragmentShader,
            334.  
              blending: THREE.AdditiveBlending,
            335.  
              depthTest: false,
            336.  
              transparent: true,
            337.  
              vertexColors: true
            338.  
              });
            339.  
               
            340.  
               
            341.  
              const geometry = new THREE.BufferGeometry();
            342.  
              const positions = [];
            343.  
              const colors = [];
            344.  
              const sizes = [];
            345.  
              const phases = [];
            346.  
              const mIndexs = [];
            347.  
               
            348.  
              const color = new THREE.Color();
            349.  
               
            350.  
              for (let i = 0; i < totalPoints; i++) {
            351.  
              const t = Math.random();
            352.  
              const y = map(t, 0, 1, -8, 10);
            353.  
              const ang = map(t, 0, 1, 0, 6 * TAU) + TAU / 2 * (i % 2);
            354.  
              const [z, x] = polar(ang, map(t, 0, 1, 5, 0));
            355.  
               
            356.  
              const modifier = map(t, 0, 1, 1, 0);
            357.  
              positions.push(x + rand(-0.3 * modifier, 0.3 * modifier));
            358.  
              positions.push(y + rand(-0.3 * modifier, 0.3 * modifier));
            359.  
              positions.push(z + rand(-0.3 * modifier, 0.3 * modifier));
            360.  
               
            361.  
              color.setHSL(map(i, 0, totalPoints, 1.0, 0.0), 1.0, 0.5);
            362.  
               
            363.  
              colors.push(color.r, color.g, color.b);
            364.  
              phases.push(rand(1000));
            365.  
              sizes.push(1);
            366.  
              const mIndex = map(i, 0, totalPoints, 1.0, 0.0);
            367.  
              mIndexs.push(mIndex);
            368.  
              }
            369.  
               
            370.  
              geometry.setAttribute(
            371.  
              "position",
            372.  
              new THREE.Float32BufferAttribute(positions, 3).setUsage(
            373.  
              THREE.DynamicDrawUsage));
            374.  
               
            375.  
               
            376.  
              geometry.setAttribute("color", new THREE.Float32BufferAttribute(colors, 3));
            377.  
              geometry.setAttribute("size", new THREE.Float32BufferAttribute(sizes, 1));
            378.  
              geometry.setAttribute("phase", new THREE.Float32BufferAttribute(phases, 1));
            379.  
              geometry.setAttribute("mIndex", new THREE.Float32BufferAttribute(mIndexs, 1));
            380.  
               
            381.  
              const tree = new THREE.Points(geometry, shaderMaterial);
            382.  
               
            383.  
              const [px, py, pz] = treePosition;
            384.  
               
            385.  
              tree.position.x = px;
            386.  
              tree.position.y = py;
            387.  
              tree.position.z = pz;
            388.  
               
            389.  
              scene.add(tree);
            390.  
              }
            391.  
               
            392.  
              function addSnow(scene, uniforms) {
            393.  
              const vertexShader = `
            394.  
              attribute float size;
            395.  
              attribute float phase;
            396.  
              attribute float phaseSecondary;
            397.  
              varying vec3 vColor;
            398.  
              varying float opacity;
            399.  
              uniform float time;
            400.  
              uniform float step;
            401.  
              float norm(float value, float min, float max ){
            402.  
              return (value - min) / (max - min);
            403.  
              }
            404.  
              float lerp(float norm, float min, float max){
            405.  
              return (max - min) * norm + min;
            406.  
              }
            407.  
              float map(float value, float sourceMin, float sourceMax, float destMin, float destMax){
            408.  
              return lerp(norm(value, sourceMin, sourceMax), destMin, destMax);
            409.  
              }
            410.  
              void main() {
            411.  
              float t = time* 0.0006;
            412.  
              vColor = color;
            413.  
              vec3 p = position;
            414.  
              p.y = map(mod(phase+step, 1000.0), 0.0, 1000.0, 25.0, -8.0);
            415.  
              p.x += sin(t+phase);
            416.  
              p.z += sin(t+phaseSecondary);
            417.  
              opacity = map(p.z, -150.0, 15.0, 0.0, 1.0);
            418.  
              vec4 mvPosition = modelViewMatrix * vec4( p, 1.0 );
            419.  
              gl_PointSize = size * ( 100.0 / -mvPosition.z );
            420.  
              gl_Position = projectionMatrix * mvPosition;
            421.  
              }
            422.  
              `;
            423.  
               
            424.  
              const fragmentShader = `
            425.  
              uniform sampler2D pointTexture;
            426.  
              varying vec3 vColor;
            427.  
              varying float opacity;
            428.  
              void main() {
            429.  
              gl_FragColor = vec4( vColor, opacity );
            430.  
              gl_FragColor = gl_FragColor * texture2D( pointTexture, gl_PointCoord );
            431.  
              }
            432.  
              `;
            433.  
              function createSnowSet(sprite) {
            434.  
              const totalPoints = 300;
            435.  
              const shaderMaterial = new THREE.ShaderMaterial({
            436.  
              uniforms: {
            437.  
              ...uniforms,
            438.  
              pointTexture: {
            439.  
              value: new THREE.TextureLoader().load(sprite)
            440.  
              }
            441.  
              },
            442.  
               
            443.  
               
            444.  
              vertexShader,
            445.  
              fragmentShader,
            446.  
              blending: THREE.AdditiveBlending,
            447.  
              depthTest: false,
            448.  
              transparent: true,
            449.  
              vertexColors: true
            450.  
              });
            451.  
               
            452.  
               
            453.  
              const geometry = new THREE.BufferGeometry();
            454.  
              const positions = [];
            455.  
              const colors = [];
            456.  
              const sizes = [];
            457.  
              const phases = [];
            458.  
              const phaseSecondaries = [];
            459.  
               
            460.  
              const color = new THREE.Color();
            461.  
               
            462.  
              for (let i = 0; i < totalPoints; i++) {
            463.  
              const [x, y, z] = [rand(25, -25), 0, rand(15, -150)];
            464.  
              positions.push(x);
            465.  
              positions.push(y);
            466.  
              positions.push(z);
            467.  
               
            468.  
              color.set(randChoise(["#f1d4d4", "#f1f6f9", "#eeeeee", "#f1f1e8"]));
            469.  
               
            470.  
              colors.push(color.r, color.g, color.b);
            471.  
              phases.push(rand(1000));
            472.  
              phaseSecondaries.push(rand(1000));
            473.  
              sizes.push(rand(4, 2));
            474.  
              }
            475.  
               
            476.  
              geometry.setAttribute(
            477.  
              "position",
            478.  
              new THREE.Float32BufferAttribute(positions, 3));
            479.  
               
            480.  
              geometry.setAttribute("color", new THREE.Float32BufferAttribute(colors, 3));
            481.  
              geometry.setAttribute("size", new THREE.Float32BufferAttribute(sizes, 1));
            482.  
              geometry.setAttribute("phase", new THREE.Float32BufferAttribute(phases, 1));
            483.  
              geometry.setAttribute(
            484.  
              "phaseSecondary",
            485.  
              new THREE.Float32BufferAttribute(phaseSecondaries, 1));
            486.  
               
            487.  
               
            488.  
              const mesh = new THREE.Points(geometry, shaderMaterial);
            489.  
               
            490.  
              scene.add(mesh);
            491.  
              }
            492.  
              const sprites = [
            493.  
              "https://assets.codepen.io/3685267/snowflake1.png",
            494.  
              "https://assets.codepen.io/3685267/snowflake2.png",
            495.  
              "https://assets.codepen.io/3685267/snowflake3.png",
            496.  
              "https://assets.codepen.io/3685267/snowflake4.png",
            497.  
              "https://assets.codepen.io/3685267/snowflake5.png"];
            498.  
               
            499.  
              sprites.forEach(sprite => {
            500.  
              createSnowSet(sprite);
            501.  
              });
            502.  
              }
            503.  
               
            504.  
              function addPlane(scene, uniforms, totalPoints) {
            505.  
              const vertexShader = `
            506.  
              attribute float size;
            507.  
              attribute vec3 customColor;
            508.  
              varying vec3 vColor;
            509.  
              void main() {
            510.  
              vColor = customColor;
            511.  
              vec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );
            512.  
              gl_PointSize = size * ( 300.0 / -mvPosition.z );
            513.  
              gl_Position = projectionMatrix * mvPosition;
            514.  
              }
            515.  
              `;
            516.  
              const fragmentShader = `
            517.  
              uniform vec3 color;
            518.  
              uniform sampler2D pointTexture;
            519.  
              varying vec3 vColor;
            520.  
              void main() {
            521.  
              gl_FragColor = vec4( vColor, 1.0 );
            522.  
              gl_FragColor = gl_FragColor * texture2D( pointTexture, gl_PointCoord );
            523.  
              }
            524.  
              `;
            525.  
              const shaderMaterial = new THREE.ShaderMaterial({
            526.  
              uniforms: {
            527.  
              ...uniforms,
            528.  
              pointTexture: {
            529.  
              value: new THREE.TextureLoader().load(`https://assets.codepen.io/3685267/spark1.png`)
            530.  
              }
            531.  
              },
            532.  
               
            533.  
               
            534.  
              vertexShader,
            535.  
              fragmentShader,
            536.  
              blending: THREE.AdditiveBlending,
            537.  
              depthTest: false,
            538.  
              transparent: true,
            539.  
              vertexColors: true
            540.  
              });
            541.  
               
            542.  
               
            543.  
              const geometry = new THREE.BufferGeometry();
            544.  
              const positions = [];
            545.  
              const colors = [];
            546.  
              const sizes = [];
            547.  
               
            548.  
              const color = new THREE.Color();
            549.  
               
            550.  
              for (let i = 0; i < totalPoints; i++) {
            551.  
              const [x, y, z] = [rand(-25, 25), 0, rand(-150, 15)];
            552.  
              positions.push(x);
            553.  
              positions.push(y);
            554.  
              positions.push(z);
            555.  
               
            556.  
              color.set(randChoise(["#93abd3", "#f2f4c0", "#9ddfd3"]));
            557.  
               
            558.  
              colors.push(color.r, color.g, color.b);
            559.  
              sizes.push(1);
            560.  
              }
            561.  
               
            562.  
              geometry.setAttribute(
            563.  
              "position",
            564.  
              new THREE.Float32BufferAttribute(positions, 3).setUsage(
            565.  
              THREE.DynamicDrawUsage));
            566.  
               
            567.  
               
            568.  
              geometry.setAttribute(
            569.  
              "customColor",
            570.  
              new THREE.Float32BufferAttribute(colors, 3));
            571.  
               
            572.  
              geometry.setAttribute("size", new THREE.Float32BufferAttribute(sizes, 1));
            573.  
               
            574.  
              const plane = new THREE.Points(geometry, shaderMaterial);
            575.  
               
            576.  
              plane.position.y = -8;
            577.  
              scene.add(plane);
            578.  
              }
            579.  
               
            580.  
              function addListners(camera, renderer, composer) {
            581.  
              document.addEventListener("keydown", e => {
            582.  
              const { x, y, z } = camera.position;
            583.  
              console.log(`camera.position.set(${x},${y},${z})`);
            584.  
              const { x: a, y: b, z: c } = camera.rotation;
            585.  
              console.log(`camera.rotation.set(${a},${b},${c})`);
            586.  
              });
            587.  
               
            588.  
              window.addEventListener(
            589.  
              "resize",
            590.  
              () => {
            591.  
              const width = window.innerWidth;
            592.  
              const height = window.innerHeight;
            593.  
               
            594.  
              camera.aspect = width / height;
            595.  
              camera.updateProjectionMatrix();
            596.  
               
            597.  
              renderer.setSize(width, height);
            598.  
              composer.setSize(width, height);
            599.  
              },
            600.  
              false);
            601.  
               
            602.  
              }
            603.  
              </script>
            604.  
               
            605.  
              </body>
            606.  
               
            607.  
              </html>
             

            日歷

            鏈接

            個人資料

            藍藍設計的小編 http://www.dzxscac.cn

            存檔

            主站蜘蛛池模板: 亚洲熟妇无码av不卡在线| 国产 欧美 日韩 在线| 亚洲人成无码网www动漫| aaa黄色片| 视频一区 中文字幕| 日韩人妻无码精品系列| 午夜福利09不卡片在线机视频| 欧美午夜精品一区二区三区| 2021亚洲国产精品无码| 377p日本欧洲亚洲大胆张筱雨| 交hdsexvideos娇小| 99热网址| 精品国产免费第一区二区三区| 国产成人8x人网站视频在线观看| 亚洲AV无码成人精品区明星换面| 又嫩又硬又黄又爽的视频| 欧美人与动牲交免费观看网| 国产成人久久精品一区二区三区| 高清不卡一区| 国产精品美女久久久久久久| 亚洲第一区欧美国产综合 | 一本色道av久久精品+网站| 超碰超碰超碰超碰| 思热99re视热频这里只精品| 最近2019免费中文第一页| 天堂网久久| av超碰在线观看| 国产av新搬来的白领女邻居| 国产主播一区二区三区在线观看| av中出| 福利一区二区在线播放| 欧洲性开放大片免费无码| 欧美激情影院| 欧美日韩久久久久| 国产探花在线精品一区二区| 国产日产欧产美韩系列影片| 尤物视频在线看| 殴美黄色大片| 丰满的人妻hd高清日本| 国内精品久久久久影院网站| 精品一区二区av|