2015-09-01 15 views
5

Zrobiłem ten (fragment poniżej) uruchomićHTML Canvas, nieostrości wyciągnąć wielokąt

var Canvas = document.getElementById('c'); 
 
    var ctx = Canvas.getContext('2d'); 
 

 
    var resize = function() { 
 
     Canvas.width = Canvas.clientWidth; 
 
     Canvas.height = Canvas.clientHeight; 
 
    }; 
 
    window.addEventListener('resize', resize); 
 
    resize(); 
 

 
    var elements = []; 
 
    var presets = {}; 
 

 
    presets.shard = function (x, y, s, random, color) { 
 
     return { 
 
      x: x, 
 
      y: y, 
 
      draw: function(ctx, t) { 
 
       this.x += 0; 
 
       this.y += 0; 
 
       var posX = this.x + + Math.sin((50 + x + (t/10))/100) * 5; 
 
       var posy = this.y + + Math.sin((55 + x + (t/10))/100) * 7; 
 
       ctx.beginPath(); 
 
       ctx.fillStyle = color; 
 
       ctx.moveTo(posX, posy); 
 
       ctx.lineTo(posX+random,posy+random); 
 
       ctx.lineTo(posX+random,posy+random); 
 
       ctx.lineTo(posX+0,posy+50); 
 
       ctx.closePath(); 
 
       ctx.fill(); 
 
      } 
 
     } 
 
    }; 
 

 
    for(var x = 0; x < Canvas.width; x++) { 
 
     for(var y = 0; y < Canvas.height; y++) { 
 
      if(Math.round(Math.random() * 60000) == 1) { 
 
       var s = ((Math.random() * 5) + 1)/10; 
 
       if(Math.round(Math.random()) == 1){ 
 
        var random = Math.floor(Math.random() * 100) + 10; 
 
        var colorRanges = ['#8c8886', '#9c9995']; 
 
        var color = colorRanges[Math.floor(Math.random() * colorRanges.length)]; 
 
        elements.push(presets.shard(x, y, s, random, color)); 
 
       } 
 
      } 
 
     } 
 
    } 
 

 
    setInterval(function() { 
 
     ctx.clearRect(0, 0, Canvas.width, Canvas.height); 
 
     var time = new Date().getTime(); 
 
     for (var e in elements) 
 
      elements[e].draw(ctx, time); 
 
    }, 10);
<canvas id="c" width="1000" height="1000"\>

po prostu trzeba dodać jeszcze jedną funkcję, aby móc używać go na stronie buduję to dla. Niektóre pływające odłamki muszą być rozmyte, aby dać poczucie głębi.

Czy płótno może to zrobić, a jeśli tak, to w jaki sposób?

Dzięki!

+0

_Can Płótno to zrobić, a jeśli tak, to jak _ Spróbuj [badać? it] (https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D) siebie – hindmost

+0

@markE Nie powiedziałem, że jest nieważny, po prostu sugeruję OP, aby najpierw spróbował znaleźć rozwiązanie. – hindmost

+0

@markE Aby przekonać OP, że Canvas nie ma gotowej do użycia funkcji/metody – hindmost

Odpowiedz

1

Kiedyś to kilka miesięcy temu, może to mógłby pracować dla Ciebie, a także:

var canvas = document.getElementById("heroCanvas"); 
var canvasContext = canvas.getContext("2d"); 

var canvasBackground = new Image(); 
canvasBackground.src = "image.jpg"; 

var drawBlur = function() { 
    // Store the width and height of the canvas for below 
    var w = canvas.width; 
    var h = canvas.height; 
    // This draws the image we just loaded to our canvas 
    canvasContext.drawImage(canvasBackground, 0, 0, w, h); 
    // This blurs the contents of the entire canvas 
    stackBlurCanvasRGBA("heroCanvas", 0, 0, w, h, 100); 
} 

canvasBackground.onload = function() { 
    drawBlur(); 
} 

Tutaj źródło: http://zurb.com/playground/image-blur-texture

+0

Widziałem to, ale nie sądzę, że działa z moich narysowanych wielokątów. IT również zaciera się wszystko, w co wierzę i chcę zmylić tylko niektóre z nich. – jansmolders86

+0

Rozumiem, ale zrobiłem to samo, co ty, z kropkami poruszającymi się po ekranie. Użyłem tej funkcji w określonych kropkach, aby można było dostosować ją do określonych wielokątów. Dodaj zmienną w funkcji drawBlur, aby przekazać określone wartości obrazu zamiast "heroCanvas". Dodałem także zmienne, aby stopniowo rozmywać kropki. Znacznie zmodyfikowałem tę funkcję, aby była odpowiednia. Zamiast obrazu można wywołać funkcję, która tworzy wielokąty. – Majestic

+0

@Majestic, myślę, że jesteś na dobrej drodze, ale twoje demo pokazuje pusty ekran w Chrome, FF i IE na Win10. – markE

Powiązane problemy