RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 1060473
Accepted
ref21
ref21
Asked:2020-12-19 03:04:04 +0000 UTC2020-12-19 03:04:04 +0000 UTC 2020-12-19 03:04:04 +0000 UTC

在这个例子中如何改变背景颜色?

  • 772

'use strict';
Math.TAU = Math.PI * 2;

Math.RAD = Math.PI / 180;

Math.DEG = 180 / Math.PI;

Math.PHI = 0.5 + 0.5 * Math.sqrt(5);

Math.random = (function(x) {
    return function() {
        x ^= x << 13;
        x ^= x >>> 17;
        x ^= x << 5;
        return 1 - (x >>> 0) / 0xFFFFFFFF;
    };
})(1);

window.addEventListener('load', function() {
    

        var _, buffer, canvas, colors, context, data, j, k, l, model, mvp, palette, points, projection, render, v, view,
            x, y, z, zero, θ, ρ, φ;
        canvas = document.getElementById('canvas');
        context = canvas.getContext('2d');
        // document.body.appendChild(canvas);
        buffer = mat4.create();
        model = mat4.create();
        view = mat4.create();
        projection = mat4.create();
        mvp = mat4.create();
        points = [];
        colors = [];
        palette = [[1.00, 1.00, 1.00, 0.30], [0.25, 0.50, 1.00, 0.75]].map(vec4.clone);


        for (_ = j = 0; j < 25000; _ = ++j) {
            ρ = 3 / 5;
            θ = Math.acos(Math.random() * 2 - 1);
            φ = Math.random() * Math.PI * 2;
            x = ρ * Math.sin(θ) * Math.cos(φ);
            y = ρ * Math.sin(θ) * Math.sin(φ);
            z = ρ * Math.cos(θ);
            points.push(v = vec4.fromValues(x, y, z, 1));
            colors.push(palette[0]);
        }
        for (_ = k = 0; k < 25000; _ = ++k) {
            x = (1 - Math.pow(Math.random(), 5)) * ((Math.random() * 2 << 1) - 1);
            y = (1 - Math.pow(Math.random(), 5)) * ((Math.random() * 2 << 1) - 1);
            z = (1 - Math.pow(Math.random(), 5)) * ((Math.random() * 2 << 1) - 1);
            points.push(v = vec4.fromValues(x, y, z, 1));
            colors.push(palette[1]);
        }
        for (_ = l = 0; l < 50000; _ = ++l) {
            x = Math.random() * 2 - 1;
            y = Math.random() * 2 - 1;
            z = Math.random() * 2 - 1;
            points.push(v = vec4.fromValues(x, y, z, 1));
            colors.push(palette[ρ < vec3.len(v) ? 1 : 0]);
        }
        data = null;
        zero = null;
        return (render = function () {
            var H, T, W, a, b, g, i, len, m, n, point, r, ref, ref1, w;
            requestAnimationFrame(render);
            T = 1e-3 * Date.now();
            W = canvas.clientWidth;
            H = canvas.clientHeight;
            if (W !== canvas.width || H !== canvas.height) {
                canvas.width = W;
                canvas.height = H;
                data = context.createImageData(W, H);
                zero = context.createImageData(W, H);


                for (i = m = 3, ref = zero.data.length; m < ref; i = m += 4) {
                    zero.data[i] = 0xFF;
                }
                data.data.set(zero.data);
            }
            mat4.identity(model);
            mat4.rotateX(model, model, T / 5);
            mat4.rotateY(model, model, T / 6);
            mat4.rotateZ(model, model, T / 7);
            mat4.lookAt(view, [0, 0, 5], [0, 0, 0], [0, 1, 0]);
            mat4.perspective(projection, 30 * Math.RAD, W / H, 1e-3, 1e3);
            [model, view, projection].reduce(function (a, b) {
                return mat4.mul(mvp, b, a);
            });
            for (i = n = 0, len = points.length; n < len; i = ++n) {
                point = points[i];
                vec4.transformMat4(buffer, point, mvp);
                vec3.scale(buffer, buffer, 1 / buffer[3]);
                x = buffer[0], y = buffer[1], z = buffer[2], w = buffer[3];
                if ((-1 < z && z < 1) && (-1 < y && y < 1) && (-1 < x && x < 1)) {
                    ref1 = colors[i], r = ref1[0], g = ref1[1], b = ref1[2], a = ref1[3];
                    x = (1 + x) * 0.5 * W | 0;
                    y = (1 - y) * 0.5 * H | 0;
                    i = x + y * W << 2;
                    a = a * H / w;
                    data.data[i++] += r * a;
                    data.data[i++] += g * a;
                    data.data[i++] += b * a;
                }
            }


            context.putImageData(data, 0, 0);
            return data.data.set(zero.data);

        })();


    

});
html {
  display: table;
  width: 100%;
  height: 100%;
}

body {
  display: table-cell;
  vertical-align: middle;
  text-align: center;
  background: #1A1D3E;
}

canvas {
  display: block;
  margin: auto;
  width: 100%;
  height: 720px;
  background: #1A1D3E;
}
<canvas id="canvas"></canvas>

<script src="https://cdnjs.cloudflare.com/ajax/libs/gl-matrix/2.3.1/gl-matrix-min.js"></script>

javascript
  • 2 2 个回答
  • 10 Views

2 个回答

  • Voted
  1. Dmitry
    2020-12-19T17:28:51Z2020-12-19T17:28:51Z

    您需要更改 palette = [[2.00, 1.00, 1.00, 1.0], [0.25, 5, 1.00, 0.75]] 数组的第一个元素 - 一个圆形,第二个 - 一个正方形 (RGB)

    'use strict';
    Math.TAU = Math.PI * 2;
    
    Math.RAD = Math.PI / 180;
    
    Math.DEG = 180 / Math.PI;
    
    Math.PHI = 0.5 + 0.5 * Math.sqrt(5);
    
    Math.random = (function(x) {
        return function() {
            x ^= x << 13;
            x ^= x >>> 17;
            x ^= x << 5;
            return 1 - (x >>> 0) / 0xFFFFFFFF;
        };
    })(1);
    
    window.addEventListener('load', function() {
        
    
            var _, buffer, canvas, colors, context, data, j, k, l, model, mvp, palette, points, projection, render, v, view,
                x, y, z, zero, θ, ρ, φ;
            canvas = document.getElementById('canvas');
            context = canvas.getContext('2d');
            // document.body.appendChild(canvas);
            buffer = mat4.create();
            model = mat4.create();
            view = mat4.create();
            projection = mat4.create();
            mvp = mat4.create();
            points = [];
            colors = [];
            palette = [[2.00, 1.00, 1.00, 1.0], [0.25, 5, 1.00, 0.75]].map(vec4.clone);
    
    
            for (_ = j = 0; j < 25000; _ = ++j) {
                ρ = 3 / 5;
                θ = Math.acos(Math.random() * 2 - 1);
                φ = Math.random() * Math.PI * 2;
                x = ρ * Math.sin(θ) * Math.cos(φ);
                y = ρ * Math.sin(θ) * Math.sin(φ);
                z = ρ * Math.cos(θ);
                points.push(v = vec4.fromValues(x, y, z, 1));
                colors.push(palette[0]);
            }
            for (_ = k = 0; k < 25000; _ = ++k) {
                x = (1 - Math.pow(Math.random(), 5)) * ((Math.random() * 2 << 1) - 1);
                y = (1 - Math.pow(Math.random(), 5)) * ((Math.random() * 2 << 1) - 1);
                z = (1 - Math.pow(Math.random(), 5)) * ((Math.random() * 2 << 1) - 1);
                points.push(v = vec4.fromValues(x, y, z, 1));
                colors.push(palette[1]);
            }
            for (_ = l = 0; l < 50000; _ = ++l) {
                x = Math.random() * 2 - 1;
                y = Math.random() * 2 - 1;
                z = Math.random() * 2 - 1;
                points.push(v = vec4.fromValues(x, y, z, 1));
                colors.push(palette[ρ < vec3.len(v) ? 1 : 0]);
            }
            data = null;
            zero = null;
            return (render = function () {
                var H, T, W, a, b, g, i, len, m, n, point, r, ref, ref1, w;
                requestAnimationFrame(render);
                T = 1e-3 * Date.now();
                W = canvas.clientWidth;
                H = canvas.clientHeight;
                if (W !== canvas.width || H !== canvas.height) {
                    canvas.width = W;
                    canvas.height = H;
                    data = context.createImageData(W, H);
                    zero = context.createImageData(W, H);
    
    
                    for (i = m = 3, ref = zero.data.length; m < ref; i = m += 4) {
                        zero.data[i] = 0xFF;
                    }
                    data.data.set(zero.data);
                }
                mat4.identity(model);
                mat4.rotateX(model, model, T / 5);
                mat4.rotateY(model, model, T / 6);
                mat4.rotateZ(model, model, T / 7);
                mat4.lookAt(view, [0, 0, 5], [0, 0, 0], [0, 1, 0]);
                mat4.perspective(projection, 30 * Math.RAD, W / H, 1e-3, 1e3);
                [model, view, projection].reduce(function (a, b) {
                    return mat4.mul(mvp, b, a);
                });
                for (i = n = 0, len = points.length; n < len; i = ++n) {
                    point = points[i];
                    vec4.transformMat4(buffer, point, mvp);
                    vec3.scale(buffer, buffer, 1 / buffer[3]);
                    x = buffer[0], y = buffer[1], z = buffer[2], w = buffer[3];
                    if ((-1 < z && z < 1) && (-1 < y && y < 1) && (-1 < x && x < 1)) {
                        ref1 = colors[i], r = ref1[0], g = ref1[1], b = ref1[2], a = ref1[3];
                        x = (1 + x) * 0.5 * W | 0;
                        y = (1 - y) * 0.5 * H | 0;
                        i = x + y * W << 2;
                        a = a * H / w;
                        data.data[i++] += r * a;
                        data.data[i++] += g * a;
                        data.data[i++] += b * a;
                    }
                }
    
    
                context.putImageData(data, 0, 0);
                return data.data.set(zero.data);
    
            })();
    
    
        
    
    });
    html {
      display: table;
      width: 100%;
      height: 100%;
    }
    
    body {
      display: table-cell;
      vertical-align: middle;
      text-align: center;
      background: #1A1D3E;
    }
    
    canvas {
      display: block;
      margin: auto;
      width: 100%;
      height: 720px;
      background: #1A1D3E;
    }
    <canvas id="canvas"></canvas>
    
    <script src="https://cdnjs.cloudflare.com/ajax/libs/gl-matrix/2.3.1/gl-matrix-min.js"></script>

    • 2
  2. Best Answer
    Stranger in the Q
    2020-12-19T20:04:53Z2020-12-19T20:04:53Z

    这是我更改的代码部分:

    for (i = 0; i < zero.data.length; i += 4) {
        zero.data[i] = 0x11;   // r
        zero.data[i+1] = 0x44; // g
        zero.data[i+2] = 0x11; // b
        zero.data[i+3] = 0xff;
    }
    

    'use strict';
    Math.TAU = Math.PI * 2;
    
    Math.RAD = Math.PI / 180;
    
    Math.DEG = 180 / Math.PI;
    
    Math.PHI = 0.5 + 0.5 * Math.sqrt(5);
    
    Math.random = (function(x) {
        return function() {
            x ^= x << 13;
            x ^= x >>> 17;
            x ^= x << 5;
            return 1 - (x >>> 0) / 0xFFFFFFFF;
        };
    })(1);
    
    window.addEventListener('load', function() {
        
    
            var _, buffer, canvas, colors, context, data, j, k, l, model, mvp, palette, points, projection, render, v, view,
                x, y, z, zero, θ, ρ, φ;
            canvas = document.getElementById('canvas');
            context = canvas.getContext('2d');
            // document.body.appendChild(canvas);
            buffer = mat4.create();
            model = mat4.create();
            view = mat4.create();
            projection = mat4.create();
            mvp = mat4.create();
            points = [];
            colors = [];
            palette = [[1.00, 1.00, 1.00, 0.30], [0.25, 0.50, 1.00, 0.75]].map(vec4.clone);
    
    
            for (_ = j = 0; j < 25000; _ = ++j) {
                ρ = 3 / 5;
                θ = Math.acos(Math.random() * 2 - 1);
                φ = Math.random() * Math.PI * 2;
                x = ρ * Math.sin(θ) * Math.cos(φ);
                y = ρ * Math.sin(θ) * Math.sin(φ);
                z = ρ * Math.cos(θ);
                points.push(v = vec4.fromValues(x, y, z, 1));
                colors.push(palette[0]);
            }
            for (_ = k = 0; k < 25000; _ = ++k) {
                x = (1 - Math.pow(Math.random(), 5)) * ((Math.random() * 2 << 1) - 1);
                y = (1 - Math.pow(Math.random(), 5)) * ((Math.random() * 2 << 1) - 1);
                z = (1 - Math.pow(Math.random(), 5)) * ((Math.random() * 2 << 1) - 1);
                points.push(v = vec4.fromValues(x, y, z, 1));
                colors.push(palette[1]);
            }
            for (_ = l = 0; l < 50000; _ = ++l) {
                x = Math.random() * 2 - 1;
                y = Math.random() * 2 - 1;
                z = Math.random() * 2 - 1;
                points.push(v = vec4.fromValues(x, y, z, 1));
                colors.push(palette[ρ < vec3.len(v) ? 1 : 0]);
            }
            data = null;
            zero = null;
            return (render = function () {
                var H, T, W, a, b, g, i, len, m, n, point, r, ref, ref1, w;
                requestAnimationFrame(render);
                T = 1e-3 * Date.now();
                W = canvas.clientWidth;
                H = canvas.clientHeight;
                if (W !== canvas.width || H !== canvas.height) {
                    canvas.width = W;
                    canvas.height = H;
                    data = context.createImageData(W, H);
                    zero = context.createImageData(W, H);
                    for (i = 0; i < zero.data.length; i += 4) {
                        zero.data[i] = 0x11;   // r
                        zero.data[i+1] = 0x44; // g
                        zero.data[i+2] = 0x11; // b
                        zero.data[i+3] = 0xff;
                    }
                    data.data.set(zero.data);
                }
                mat4.identity(model);
                mat4.rotateX(model, model, T / 5);
                mat4.rotateY(model, model, T / 6);
                mat4.rotateZ(model, model, T / 7);
                mat4.lookAt(view, [0, 0, 5], [0, 0, 0], [0, 1, 0]);
                mat4.perspective(projection, 30 * Math.RAD, W / H, 1e-3, 1e3);
                [model, view, projection].reduce(function (a, b) {
                    return mat4.mul(mvp, b, a);
                });
                for (i = n = 0, len = points.length; n < len; i = ++n) {
                    point = points[i];
                    vec4.transformMat4(buffer, point, mvp);
                    vec3.scale(buffer, buffer, 1 / buffer[3]);
                    x = buffer[0], y = buffer[1], z = buffer[2], w = buffer[3];
                    if ((-1 < z && z < 1) && (-1 < y && y < 1) && (-1 < x && x < 1)) {
                        ref1 = colors[i], r = ref1[0], g = ref1[1], b = ref1[2], a = ref1[3];
                        x = (1 + x) * 0.5 * W | 0;
                        y = (1 - y) * 0.5 * H | 0;
                        i = x + y * W << 2;
                        a = a * H / w;
                        data.data[i++] += r * a;
                        data.data[i++] += g * a;
                        data.data[i++] += b * a;
                    }
                }
    
    
                context.putImageData(data, 0, 0);
                return data.data.set(zero.data);
    
            })();
    
    
        
    
    });
    html {
      display: table;
      width: 100%;
      height: 100%;
    }
    
    body {
      display: table-cell;
      vertical-align: middle;
      text-align: center;
    
    }
    
    canvas {
      display: block;
      margin: auto;
      width: 100%;
      height: 720px;
    
    }
    <canvas id="canvas"></canvas>
    
    <script src="https://cdnjs.cloudflare.com/ajax/libs/gl-matrix/2.3.1/gl-matrix-min.js"></script>

    • 1

相关问题

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    根据浏览器窗口的大小调整背景图案的大小

    • 2 个回答
  • Marko Smith

    理解for循环的执行逻辑

    • 1 个回答
  • Marko Smith

    复制动态数组时出错(C++)

    • 1 个回答
  • Marko Smith

    Or and If,elif,else 构造[重复]

    • 1 个回答
  • Marko Smith

    如何构建支持 x64 的 APK

    • 1 个回答
  • Marko Smith

    如何使按钮的输入宽度?

    • 2 个回答
  • Marko Smith

    如何显示对象变量的名称?

    • 3 个回答
  • Marko Smith

    如何循环一个函数?

    • 1 个回答
  • Marko Smith

    LOWORD 宏有什么作用?

    • 2 个回答
  • Marko Smith

    从字符串的开头删除直到并包括一个字符

    • 2 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5