最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

three.js 將圖片馬賽克化的示例代碼

 更新時間:2020年07月31日 10:31:15   作者:郭先生  
這篇文章主要介紹了three.js 將圖片馬賽克化的方法,文中示例代碼非常詳細(xì),幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下

這篇郭先生來說說BufferGeometry,類型化數(shù)組和粒子系統(tǒng)的使用,并且讓圖片有馬賽克效果(同理可以讓不清晰的圖片清晰化),如圖所示

1. 解析圖片

解析圖片和上一篇一樣

initCanvas() {
  canvas = document.createElement('canvas');
  content = canvas.getContext('2d');
  canvas.width = 1600;
  canvas.height = 1200;
  img = new Image();
  img.crossOrigin = '*';
  img.src = "/static/images/base/girl.jpg";
  img.onload = () => {
    content.drawImage(img, 0, 0, canvas.width, canvas.height);
    imgDate = content.getImageData(0, 0, canvas.width, canvas.height);
    this.createPotCloud();  //創(chuàng)建點(diǎn)云
  };
}

2. 操作像素點(diǎn)

createPotCloud() {
  if (points) {
    scene.remove(points)
  }
  let cw = Math.floor(canvas.width / size);
  let ch = Math.floor(canvas.height / size);
  particles = cw * ch;
  geometry = new THREE.BufferGeometry();
  positions = new Float32Array(Math.floor(particles * 3));
  positions_af = new Float32Array(Math.floor(particles * 3));
  var colors = new Float32Array(Math.floor(particles * 3));
  for (var i = 0; i < positions.length; i += 1) {

    positions[3 * i] = - canvas.width / 2 + (i % cw) * size;
    positions[3 * i + 1] = canvas.height / 2 + Math.floor((-1 - i) / cw) * size;
    positions[3 * i + 2] = 0;

    let selectPos = size * (i % cw) + Math.floor(i / cw) * cw * size * size;
    colors[3 * i] = imgDate.data[4 * selectPos] / 255.0;
    colors[3 * i + 1] = imgDate.data[4 * selectPos + 1] / 255.0;
    colors[3 * i + 2] = imgDate.data[4 * selectPos + 2] / 255.0;
  }
  geometry.setAttribute('position', new THREE.BufferAttribute(positions, 3));
  geometry.setAttribute('color', new THREE.BufferAttribute(colors, 3))
  geometry.dynamic = true;
  geometry.attributes.position.needsUpdate = true;
  var material = new THREE.PointsMaterial({ size: size, vertexColors: THREE.VertexColors })
  points = new THREE.Points(geometry, material);
  points.name = 'points';
  scene.add(points);
  loaded = true;
},

可以不用糾結(jié)代碼,核心思想其實我們只需要每隔一定的顏色點(diǎn)取出一個顏色點(diǎn),然后將這個顏色賦予到geometry的color屬性上,就可以了,也可以每隔兩行、兩列取一個點(diǎn),但是圖片上面的點(diǎn)是一維的,所以需要一些數(shù)學(xué)方法,

如圖所示,原理很簡單哦。將不清晰的圖片清晰化,就是需要插入更多的像素點(diǎn),插入的像素點(diǎn),需要根據(jù)已存在的像素點(diǎn)的顏色進(jìn)行插值,比如原圖的像素點(diǎn)1為0xffffff,像素點(diǎn)2的顏色為0xdddddd,則插在兩個像素點(diǎn)之間像素點(diǎn)的顏色為0xeeeeee,以此類推。

以上就是three.js 將圖片馬賽克化的示例代碼的詳細(xì)內(nèi)容,更多關(guān)于three.js 將圖片馬賽克化的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

最新評論

静海县| 克东县| 股票| 花垣县| 茶陵县| 保定市| 汨罗市| 阿荣旗| 昌黎县| 阜康市| 定边县| 佛山市| 芜湖市| 长阳| 临洮县| 大姚县| 富宁县| 丰镇市| 隆回县| 阿坝| 阳春市| 鲜城| 汶上县| 福贡县| 黄浦区| 山阳县| 鸡西市| 宣化县| 清水河县| 霞浦县| 丁青县| 甘孜| 泾川县| 溧阳市| 岐山县| 丹凤县| 上林县| 兴和县| 永胜县| 醴陵市| 故城县|