伊人久久大香线蕉综合影视_日韩精品少妇无码受不了_71pao成人国产永久免费视频_国产伦片中文免费观看_国产高清无码麻豆精品_九色综合伊人久久富二代_日韩黄色精品_日韩A∨精品日韩精品无码

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

2023-12-25    前端達人

、制作方法 

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

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

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

 

4.特別提醒:打開的時候電腦一定要處于聯(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>
 

日歷

鏈接

個人資料

藍藍設(shè)計的小編 http://www.cqzjtgb.com

存檔

bbb黄色大片| 日韩中文字幕欧美一区二区| 国产一区在线观看成人免费| 欧美日韩中文字幕国产精品一区二区三区 | 夜夜爽天天搞| 亚洲avbb在线观看| 国产免费男女视频| 天天躁夜夜躁狠狠躁躁| 国产成人精品在线电影| 国产欧美日韩综合在线一区二区| 99国产精品99久久久久| 此物有八面人人有两片| 国产黄a三级三级三级人| 91国产中文字幕| 法律面前人人平等表现在哪些方面| 亚洲av片天天在线观看| 男女午夜视频在线观看| 91成年电影在线观看| 中文字幕人妻熟女乱码| 99国产精品99久久久久| 自线自在国产av| 天堂动漫精品| 香蕉国产在线看| 欧美色欧美亚洲另类二区 | 精品国产乱码久久久久久男人| 人人妻人人澡人人看| 午夜免费鲁丝| 亚洲全国av大片| 国产成年人精品一区二区| 国产精品 国内视频| 精品欧美一区二区三区在线| 欧美不卡视频在线免费观看 | 精品电影一区二区在线| 90打野战视频偷拍视频| 首页视频小说图片口味搜索| 少妇熟女aⅴ在线视频| 亚洲美女黄片视频| 免费观看人在逋| 操美女的视频在线观看| 超碰成人久久| 国产又色又爽无遮挡免费看| 最近最新中文字幕大全免费视频| 成人亚洲精品av一区二区| 中文字幕精品免费在线观看视频| 国产亚洲精品第一综合不卡| 18禁美女被吸乳视频| 性欧美人与动物交配| 亚洲午夜理论影院| 啦啦啦免费观看视频1| 免费女性裸体啪啪无遮挡网站| e午夜精品久久久久久久| 国产亚洲精品综合一区在线观看 | 亚洲电影在线观看av| 一进一出好大好爽视频| 欧美乱妇无乱码| 九色国产91popny在线| 精品不卡国产一区二区三区| 美女高潮喷水抽搐中文字幕| 操出白浆在线播放| 欧美日本视频| 国产真人三级小视频在线观看| 精品免费久久久久久久清纯| 多毛熟女@视频| 国产精品99久久99久久久不卡| 在线观看免费视频网站a站| 最近最新中文字幕大全免费视频| 午夜久久久久精精品| 在线观看66精品国产| 婷婷六月久久综合丁香| 在线观看免费日韩欧美大片| 夜夜躁狠狠躁天天躁| 国产一区二区三区视频了| 深夜精品福利| 黄色片一级片一级黄色片| 久久国产亚洲av麻豆专区| 亚洲全国av大片| 亚洲av电影在线进入| 久久这里只有精品19| 中文字幕高清在线视频| 精品久久久久久,| 久久人妻熟女aⅴ| 中出人妻视频一区二区| 亚洲专区国产一区二区| 一二三四社区在线视频社区8| tocl精华| 国产亚洲精品综合一区在线观看 | 少妇粗大呻吟视频| 天天添夜夜摸| 国产精品久久电影中文字幕| 成人国产综合亚洲| 免费在线观看完整版高清| 禁无遮挡网站| 99国产精品99久久久久| 男女午夜视频在线观看| 国产一区二区三区综合在线观看| 亚洲欧美激情综合另类| 亚洲最大成人中文| 久久精品国产清高在天天线| 欧美日韩一级在线毛片| 在线国产一区二区在线| 男人舔女人下体高潮全视频| 午夜福利视频1000在线观看 | 亚洲无线在线观看| 久久久国产成人精品二区| 咕卡用的链子| 欧美av亚洲av综合av国产av| 十八禁人妻一区二区| 黄色a级毛片大全视频| 12—13女人毛片做爰片一| 国产一区二区三区综合在线观看| 欧美黄色淫秽网站| 91在线观看av| avwww免费| 久久久久国内视频| 精品一区二区三区av网在线观看| 老司机深夜福利视频在线观看| 一级a爱片免费观看的视频| 免费女性裸体啪啪无遮挡网站| 桃色一区二区三区在线观看| www日本在线高清视频| 精品一品国产午夜福利视频| 精品欧美国产一区二区三| 国产精品一区二区免费欧美| 亚洲精品在线美女| 黄色视频,在线免费观看| av片东京热男人的天堂| 精品不卡国产一区二区三区| or卡值多少钱| 亚洲人成电影免费在线| 国产日韩一区二区三区精品不卡| av中文乱码字幕在线| 女生性感内裤真人,穿戴方法视频| а√天堂www在线а√下载| 老司机午夜十八禁免费视频| 久久伊人香网站| 变态另类成人亚洲欧美熟女 | 无人区码免费观看不卡| 真人做人爱边吃奶动态| 欧美日韩黄片免| 亚洲av美国av| 99国产精品一区二区蜜桃av| 亚洲五月婷婷丁香| 亚洲精品国产一区二区精华液| 日韩精品中文字幕看吧| 啦啦啦免费观看视频1| 黄色视频不卡| 国产成人精品久久二区二区91| 高清毛片免费观看视频网站| 无人区码免费观看不卡| 亚洲精品国产一区二区精华液| 日韩欧美在线二视频| 欧美最黄视频在线播放免费| 在线观看66精品国产| 男人舔女人的私密视频| av欧美777| 变态另类丝袜制服| 国产熟女午夜一区二区三区| 91老司机精品| 国产精品99久久99久久久不卡| 欧美在线黄色| 久久久国产精品麻豆| 又大又爽又粗| 欧美另类亚洲清纯唯美| 一本大道久久a久久精品| 久久狼人影院| 桃红色精品国产亚洲av| 50天的宝宝边吃奶边哭怎么回事| 一级a爱片免费观看的视频| 99riav亚洲国产免费| 国产激情欧美一区二区| 男女下面进入的视频免费午夜 | 可以在线观看的亚洲视频| 无限看片的www在线观看| 久久天堂一区二区三区四区| 国产精品亚洲av一区麻豆| 国产精品一区二区精品视频观看| 免费高清在线观看日韩| 91大片在线观看| 18禁观看日本| 欧美成人性av电影在线观看| 91精品国产国语对白视频| 国产成人系列免费观看| 真人一进一出gif抽搐免费| 咕卡用的链子| 国产精品久久久人人做人人爽| 久9热在线精品视频| 国产精品亚洲美女久久久| 免费av毛片视频| 国产欧美日韩综合在线一区二区| 国产亚洲av高清不卡| 亚洲中文av在线| 熟女少妇亚洲综合色aaa.| 国产一级毛片七仙女欲春2 | 人妻久久中文字幕网| 午夜两性在线视频| 日本免费a在线| 国产aⅴ精品一区二区三区波| 999久久久国产精品视频| 免费人成视频x8x8入口观看| 国产成人精品久久二区二区免费| 国产91精品成人一区二区三区| 99久久国产精品久久久| 一级a爱视频在线免费观看| www.999成人在线观看| 亚洲人成伊人成综合网2020| 国产精品98久久久久久宅男小说| 久久久久久大精品| 久久人妻av系列| 大型黄色视频在线免费观看| 中国美女看黄片| 脱女人内裤的视频| 久久婷婷人人爽人人干人人爱 | 国产精品影院久久| 在线观看午夜福利视频| 午夜福利影视在线免费观看| 国产精品免费一区二区三区在线| 女人精品久久久久毛片| 国产精品综合久久久久久久免费 | 最近最新中文字幕大全电影3 | 久久久久久免费高清国产稀缺| 一个人免费在线观看的高清视频| 欧美大码av| 天天躁夜夜躁狠狠躁躁| 1024视频免费在线观看| 波多野结衣巨乳人妻| 亚洲国产精品999在线| 欧美成人一区二区免费高清观看 | 男人舔女人下体高潮全视频| 午夜老司机福利片| 久久久久国产精品人妻aⅴ院| 岛国视频午夜一区免费看| x7x7x7水蜜桃| 精品福利观看| АⅤ资源中文在线天堂| 色尼玛亚洲综合影院| 国产精品久久久久久亚洲av鲁大| 欧美人与性动交α欧美精品济南到| 女性被躁到高潮视频| 女生性感内裤真人,穿戴方法视频| 午夜成年电影在线免费观看| 日韩欧美国产一区二区入口| 99香蕉大伊视频| 免费无遮挡裸体视频| 国产精品爽爽va在线观看网站 | 国产精品野战在线观看| 久久精品国产亚洲av香蕉五月| 国产欧美日韩综合在线一区二区| 在线观看www视频免费| 亚洲av第一区精品v没综合| 精品久久久久久久久久免费视频| 午夜福利一区二区在线看| 国产亚洲欧美98| 精品国产超薄肉色丝袜足j| 搡老妇女老女人老熟妇| 黑人操中国人逼视频| 在线免费观看的www视频| 亚洲欧美精品综合久久99| 国产高清视频在线播放一区| 两性夫妻黄色片| 亚洲最大成人中文| 欧美激情高清一区二区三区| 亚洲午夜理论影院| 成人免费观看视频高清| 日日夜夜操网爽| 日韩欧美一区二区三区在线观看| 美女扒开内裤让男人捅视频| 亚洲国产精品sss在线观看| 国产欧美日韩综合在线一区二区| 欧美亚洲日本最大视频资源| a在线观看视频网站| 欧美性长视频在线观看| 成在线人永久免费视频| 丁香六月欧美| 久久中文看片网| 国产亚洲欧美精品永久| 午夜影院日韩av| 午夜精品在线福利| 在线观看免费视频日本深夜| 亚洲黑人精品在线| 一本大道久久a久久精品| 女生性感内裤真人,穿戴方法视频| 国产人伦9x9x在线观看| 国产精品香港三级国产av潘金莲| 国产成人欧美在线观看| 人人妻,人人澡人人爽秒播| 制服诱惑二区| 国产精品1区2区在线观看.| av在线天堂中文字幕| 亚洲精品av麻豆狂野| 久久中文看片网| 午夜福利成人在线免费观看| 亚洲欧美日韩无卡精品| 99久久精品国产亚洲精品| 黄色 视频免费看| 久久亚洲真实| 成人永久免费在线观看视频| 淫秽高清视频在线观看| 一级毛片高清免费大全| 啦啦啦 在线观看视频| 午夜久久久久精精品| 在线观看一区二区三区| 国产精品美女特级片免费视频播放器 | 美女高潮到喷水免费观看| 亚洲欧洲精品一区二区精品久久久| 亚洲国产毛片av蜜桃av| 欧美成狂野欧美在线观看| 久久久久国产精品人妻aⅴ院| 黄色视频,在线免费观看| 亚洲精品av麻豆狂野| 岛国视频午夜一区免费看| 色尼玛亚洲综合影院| 啦啦啦免费观看视频1| 国产欧美日韩一区二区精品| 久久精品国产99精品国产亚洲性色 | 每晚都被弄得嗷嗷叫到高潮| 在线观看免费日韩欧美大片| 亚洲中文字幕日韩| 又大又爽又粗| 老司机在亚洲福利影院| 久久亚洲真实| 757午夜福利合集在线观看| 久久久精品欧美日韩精品| 50天的宝宝边吃奶边哭怎么回事| 美女高潮喷水抽搐中文字幕| 黄片播放在线免费| 美女高潮喷水抽搐中文字幕| 国产成人av激情在线播放| 日韩欧美一区二区三区在线观看| 久久伊人香网站| 中文字幕人成人乱码亚洲影| 老司机福利观看| 亚洲少妇的诱惑av| 极品人妻少妇av视频| 悠悠久久av| tocl精华| 成人特级黄色片久久久久久久| av超薄肉色丝袜交足视频| 757午夜福利合集在线观看| 久久中文字幕一级| 好看av亚洲va欧美ⅴa在| 美女高潮到喷水免费观看| 啦啦啦观看免费观看视频高清 | 国产成人精品久久二区二区免费| 老汉色av国产亚洲站长工具| 免费观看精品视频网站| 免费在线观看完整版高清| 久久久久精品国产欧美久久久| 在线观看一区二区三区| 日本三级黄在线观看| 久久人人精品亚洲av| 无遮挡黄片免费观看| 成人av一区二区三区在线看| 国产精品av久久久久免费| 欧美另类亚洲清纯唯美| ponron亚洲| 美国免费a级毛片| 九色亚洲精品在线播放| 亚洲第一av免费看| 国产极品粉嫩免费观看在线| 91字幕亚洲| 亚洲精品国产精品久久久不卡| 黄片播放在线免费| 亚洲久久久国产精品| 丰满人妻熟妇乱又伦精品不卡| 亚洲精品久久成人aⅴ小说| 无人区码免费观看不卡| 少妇 在线观看| 18美女黄网站色大片免费观看| 一本综合久久免费| 狠狠狠狠99中文字幕| 99国产精品一区二区三区| 久久人妻熟女aⅴ| 在线国产一区二区在线| 99国产综合亚洲精品| 在线国产一区二区在线| 免费高清在线观看日韩| 亚洲国产日韩欧美精品在线观看 | 男女做爰动态图高潮gif福利片 | 免费看a级黄色片| 在线观看日韩欧美| 自线自在国产av| 国产精品美女特级片免费视频播放器 | 国产私拍福利视频在线观看| 成人18禁在线播放| 久久中文看片网| 九色国产91popny在线| 在线永久观看黄色视频| 天堂影院成人在线观看| 国产欧美日韩一区二区三| 中文字幕最新亚洲高清| 亚洲熟妇中文字幕五十中出| 久久国产亚洲av麻豆专区| 欧美激情极品国产一区二区三区| 国产亚洲精品综合一区在线观看 | 久久亚洲精品不卡| 国产精品永久免费网站| 88av欧美| 久久青草综合色| 女生性感内裤真人,穿戴方法视频| 91精品国产国语对白视频| 久久久久久大精品| 老司机深夜福利视频在线观看| 亚洲精品中文字幕一二三四区| 久久久久国产精品人妻aⅴ院| 最近最新中文字幕大全免费视频| 欧美日韩精品网址| 1024视频免费在线观看| 精品一区二区三区视频在线观看免费| 欧美日韩福利视频一区二区| 涩涩av久久男人的天堂| 久久久久国产一级毛片高清牌| 国产成人系列免费观看| 色尼玛亚洲综合影院| 宅男免费午夜| 人人澡人人妻人| 黄色视频不卡| 亚洲国产欧美网| 免费观看人在逋| www日本在线高清视频| 国产高清有码在线观看视频 | 大码成人一级视频| 国产主播在线观看一区二区| 黑人欧美特级aaaaaa片| 国产午夜精品久久久久久| 中文字幕高清在线视频| 久久人妻福利社区极品人妻图片| 欧美绝顶高潮抽搐喷水| 一夜夜www| 午夜激情av网站| 亚洲人成电影观看| ponron亚洲| 欧美色欧美亚洲另类二区 | 国产精品久久电影中文字幕| 日韩欧美三级三区| 日日爽夜夜爽网站| 看免费av毛片| 久久久国产精品麻豆| 9191精品国产免费久久| 欧美成人性av电影在线观看| 国产精品98久久久久久宅男小说| 黄色女人牲交| 50天的宝宝边吃奶边哭怎么回事| 亚洲av电影在线进入| 久久 成人 亚洲| 免费高清在线观看日韩| 欧美不卡视频在线免费观看 | 国产亚洲精品久久久久5区| 一边摸一边抽搐一进一出视频| 18美女黄网站色大片免费观看| 不卡一级毛片| 亚洲成a人片在线一区二区| 啦啦啦免费观看视频1| 国产片内射在线| 久久精品影院6| 中文字幕高清在线视频| 国产成人精品无人区| 一级a爱视频在线免费观看| 嫁个100分男人电影在线观看| 不卡一级毛片| 女人精品久久久久毛片| 一区二区日韩欧美中文字幕| 人人澡人人妻人| 91成年电影在线观看| 欧美国产精品va在线观看不卡| 国产精品 国内视频| 不卡一级毛片| 国产97色在线日韩免费| 色综合亚洲欧美另类图片| 亚洲精品国产色婷婷电影| 欧美午夜高清在线| 久久国产亚洲av麻豆专区| 免费女性裸体啪啪无遮挡网站| 九色亚洲精品在线播放| 欧美日韩一级在线毛片| 搡老岳熟女国产| 黄色丝袜av网址大全| 19禁男女啪啪无遮挡网站| 国产精品亚洲美女久久久| 色精品久久人妻99蜜桃| 午夜精品国产一区二区电影| 亚洲成国产人片在线观看| 免费av毛片视频| 国产精品野战在线观看| 亚洲av熟女| 亚洲欧美激情在线| 无人区码免费观看不卡| av欧美777| 国内精品久久久久精免费| 99国产综合亚洲精品| 九色亚洲精品在线播放| 国产欧美日韩综合在线一区二区| 中文字幕人成人乱码亚洲影| 我的亚洲天堂| 少妇裸体淫交视频免费看高清 | 国产片内射在线| 国产精品九九99| 欧美精品啪啪一区二区三区| 久久午夜亚洲精品久久| 天天躁狠狠躁夜夜躁狠狠躁| 久久人妻av系列| 一个人免费在线观看的高清视频| 国语自产精品视频在线第100页| 精品欧美国产一区二区三| 99国产极品粉嫩在线观看| 欧洲精品卡2卡3卡4卡5卡区| 在线天堂中文资源库| 欧美绝顶高潮抽搐喷水| 久久九九热精品免费| 亚洲精品在线观看二区| 伦理电影免费视频| 午夜福利免费观看在线| av免费在线观看网站| 操出白浆在线播放| 一区福利在线观看| 一级毛片女人18水好多| 亚洲欧美一区二区三区黑人| 亚洲精品国产区一区二| 成年女人毛片免费观看观看9| 久久天堂一区二区三区四区| 精品国产国语对白av| 麻豆av在线久日| www.自偷自拍.com| 国内久久婷婷六月综合欲色啪| 国产精品日韩av在线免费观看 | 如日韩欧美国产精品一区二区三区| 欧美日本亚洲视频在线播放| 成人18禁高潮啪啪吃奶动态图| 天天添夜夜摸| 午夜两性在线视频| 欧美丝袜亚洲另类 | 窝窝影院91人妻| 亚洲一码二码三码区别大吗| 午夜视频精品福利| 亚洲国产中文字幕在线视频| 成人免费观看视频高清| 一级a爱视频在线免费观看| 三级毛片av免费| av欧美777| 91精品国产国语对白视频| 夜夜爽天天搞| 欧美+亚洲+日韩+国产| 亚洲国产精品久久男人天堂| 久久久久久大精品| 黑人巨大精品欧美一区二区mp4| 免费在线观看亚洲国产| 18禁国产床啪视频网站| 好看av亚洲va欧美ⅴa在| 久久久久九九精品影院| 久久国产乱子伦精品免费另类| 亚洲天堂国产精品一区在线| 国内毛片毛片毛片毛片毛片| 亚洲三区欧美一区| 狂野欧美激情性xxxx| 亚洲av成人av| 激情在线观看视频在线高清| 国产麻豆成人av免费视频| 久久婷婷人人爽人人干人人爱 | 一个人观看的视频www高清免费观看 | 欧美激情 高清一区二区三区| 亚洲国产日韩欧美精品在线观看 | 两个人看的免费小视频| 精品免费久久久久久久清纯| 一区二区三区高清视频在线| 成人三级做爰电影| 琪琪午夜伦伦电影理论片6080| 国产精品99久久99久久久不卡| 热99re8久久精品国产| 欧美午夜高清在线| 国产成+人综合+亚洲专区| 后天国语完整版免费观看| 男人舔女人下体高潮全视频| 久久久久久久久中文| 又大又爽又粗| 在线视频色国产色| 99精品在免费线老司机午夜| 国产精品 国内视频| 日本五十路高清| 精品第一国产精品| 亚洲精品中文字幕一二三四区| 久久久久久人人人人人| 国内久久婷婷六月综合欲色啪| 国产av精品麻豆| 亚洲精品国产区一区二| 免费久久久久久久精品成人欧美视频| 欧美日韩中文字幕国产精品一区二区三区 | 97人妻精品一区二区三区麻豆 | 欧美绝顶高潮抽搐喷水| 午夜精品久久久久久毛片777| 精品人妻在线不人妻| 91九色精品人成在线观看| 两性夫妻黄色片| avwww免费| 国产亚洲精品综合一区在线观看 | 夜夜爽天天搞| 免费看a级黄色片| 欧美一级a爱片免费观看看 | 国内毛片毛片毛片毛片毛片| 丝袜在线中文字幕| 国产精品永久免费网站| 91av网站免费观看| 午夜精品国产一区二区电影| 午夜久久久久精精品| 51午夜福利影视在线观看| 久久人人97超碰香蕉20202| 国产日韩一区二区三区精品不卡| 日日干狠狠操夜夜爽| 日韩精品青青久久久久久| 国产在线精品亚洲第一网站| 日韩av在线大香蕉| www.自偷自拍.com| 久久久久久久久免费视频了| av网站免费在线观看视频| 国产男靠女视频免费网站| 淫妇啪啪啪对白视频| av网站免费在线观看视频|