国产精品美女久久久浪潮AV,国产精品三级一二三区,久久精品国产一区二区小说 ,依依成人影视国产精品,全部无卡免费的毛片在线看,日本一区二区三深夜不卡,国产精品女同一区二区久久,国产精品夜色一区二区三区

        好看的圣誕樹(動(dòng)態(tài)效果) 轉(zhuǎn)自 csdn

        2023-12-25    前端達(dá)人

        、制作方法 

        1.復(fù)制代碼到Dreamweaver或HBuilder或vscode中

        2.點(diǎn)擊運(yùn)行---運(yùn)行到瀏覽器---選擇你要打開的瀏覽器

        3.打開后會(huì)出現(xiàn)這個(gè)界面,前四個(gè)是固定音樂,最后一個(gè)是自主選擇的音樂,你可以選擇你電腦上的歌曲,什么歌曲都行(第一次打開可能會(huì)有點(diǎn)慢,稍等片刻即可,選擇音樂的時(shí)候點(diǎn)一下沒反應(yīng)的話多點(diǎn)幾下即可,第一次打開這屬于正?,F(xiàn)象)

         

        4.特別提醒:打開的時(shí)候電腦一定要處于聯(lián)網(wǎng)狀態(tài)
         

        三、源代碼

         
        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},$,${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>
         

        日歷

        鏈接

        個(gè)人資料

        存檔

        主站蜘蛛池模板: 国产韩国精品一区二区三区| 夹江县| 久久无码人妻影院| 孕交videosgratis孕妇性欧美| 久久久久亚洲av无码专| 国语自产偷拍精品视频偷拍| 宝贝胸罩脱了让我揉你的胸| 丰满岳乱妇三级高清| 极品新婚夜少妇真紧| 岛国av无码免费无禁网站| 梁河县| 久久ww精品w免费人成| 都匀市| 国产精品久久久久久亚洲| 化隆| 又爽又黄又无遮挡网站动态图| 泸定县| 天天燥日日燥| 国产裸体美女视频全黄| 边啃奶头边躁狠狠躁| 临猗县| 欧美成年性h版影视中文字幕| 99精品偷自拍| 吃奶揉捏奶头高潮视频在线观看 | 临高县| 18禁无遮拦无码国产在线播放 | 亚洲人成色7777在线观看不卡 | 月夜直播在线观看免费完整版| 长岭县| 亚洲av成人午夜福利| 高阳县| 国产欧美久久久精品影院| xxxx漂亮少妇xxxxhd| 日产日韩亚洲欧美综合在线| 2021国产麻豆剧传媒精品入口| 武宣县| 亚洲av日韩综合一区久热| 公的大龟慢慢挺进我的体内视频| 欧美性猛交╳xxx乱大交| 最近2019中文免费字幕在线观看| 天堂无码人妻精品一区二区三区|