日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當(dāng)前位置:首頁(yè) > 科技  > 軟件

二維碼還能這么玩?制作一個(gè)3D動(dòng)態(tài)粒子二維碼!

來(lái)源: 責(zé)編: 時(shí)間:2024-06-05 17:46:05 193觀看
導(dǎo)讀我們知道,在一些內(nèi)容創(chuàng)作網(wǎng)站,直接貼二維碼的話文章會(huì)被限流警告,那么如何才能夠光明正大的貼出二維碼呢?看完本文,相信你就會(huì)有答案了。最終我們想要實(shí)現(xiàn)這樣的一個(gè)效果:最終效果本文最終的效果可以訪問(wèn)https://gallery.xi

我們知道,在一些內(nèi)容創(chuàng)作網(wǎng)站,直接貼二維碼的話文章會(huì)被限流警告,那么如何才能夠光明正大的貼出二維碼呢?看完本文,相信你就會(huì)有答案了。最終我們想要實(shí)現(xiàn)這樣的一個(gè)效果:aFV28資訊網(wǎng)——每日最新資訊28at.com

最終效果最終效果aFV28資訊網(wǎng)——每日最新資訊28at.com

本文最終的效果可以訪問(wèn)https://gallery.xieyufei.com/about查看aFV28資訊網(wǎng)——每日最新資訊28at.com

建模

要實(shí)現(xiàn)這樣的效果,首先我們需要將二維碼進(jìn)行建模處理;網(wǎng)絡(luò)上也有很多建模工具,這里筆者推薦使用開(kāi)源且好用的Blender4進(jìn)行建模;整個(gè)建模的過(guò)程較為繁瑣,因此需要一定的耐心和細(xì)心;如果有更好的建模方式,歡迎在評(píng)論區(qū)留言討論。aFV28資訊網(wǎng)——每日最新資訊28at.com

選中右上角的Z軸,將圖片拖拽入編輯器中,最好將二維碼的四周白邊進(jìn)行裁切;然后調(diào)整其XYZ軸位置,讓其居中:aFV28資訊網(wǎng)——每日最新資訊28at.com

導(dǎo)入導(dǎo)入aFV28資訊網(wǎng)——每日最新資訊28at.com

Shift+A鍵,我們添加一個(gè)網(wǎng)格=>平面進(jìn)來(lái),再次調(diào)整位置,然后選擇右上角的切換透視模式,快捷鍵是Alt+Z鍵;開(kāi)啟透視模式后,我們就可以調(diào)整平面的大小,和二維碼中間部分大小相同即可。aFV28資訊網(wǎng)——每日最新資訊28at.com

添加并調(diào)整平面添加并調(diào)整平面aFV28資訊網(wǎng)——每日最新資訊28at.com

選擇平面后,繼續(xù)點(diǎn)擊Tab鍵進(jìn)入編輯模式,Ctrl+R添加分割線,在平面的橫向和縱向都添加多個(gè)分割線,滾動(dòng)鼠標(biāo)滾輪可以增加或減少數(shù)量,當(dāng)數(shù)量剛好可以切割每個(gè)二維碼的方塊時(shí)點(diǎn)擊右鍵確定:aFV28資訊網(wǎng)——每日最新資訊28at.com

添加分割線添加分割線aFV28資訊網(wǎng)——每日最新資訊28at.com

點(diǎn)擊左上角的面選擇模式以及擴(kuò)展當(dāng)前選中項(xiàng)模式,將白色塊的部分選中出來(lái),然后點(diǎn)擊del鍵進(jìn)行刪除,選擇面選項(xiàng),這個(gè)過(guò)程需要耐心慢慢選擇:aFV28資訊網(wǎng)——每日最新資訊28at.com

注意框選面中間的小點(diǎn),才能選中面。aFV28資訊網(wǎng)——每日最新資訊28at.com

選擇刪除面選擇刪除面aFV28資訊網(wǎng)——每日最新資訊28at.com

刪除后我們得到了這樣一個(gè)圖形,我們發(fā)現(xiàn)依然可以進(jìn)行掃碼:aFV28資訊網(wǎng)——每日最新資訊28at.com

刪除完成刪除完成aFV28資訊網(wǎng)——每日最新資訊28at.com

我們給每個(gè)黑色的小方塊同時(shí)添加橫向和縱向的分割線,選擇所有的面,點(diǎn)擊del刪除,選擇僅邊和面選項(xiàng)aFV28資訊網(wǎng)——每日最新資訊28at.com

這一步也需要細(xì)心和耐心,當(dāng)然你也可以在前面第一次分割的時(shí)候,分割得更細(xì)。aFV28資訊網(wǎng)——每日最新資訊28at.com

刪除面和邊刪除面和邊aFV28資訊網(wǎng)——每日最新資訊28at.com

面和邊刪除了,我們的界面上看似什么都沒(méi)有了,不過(guò)別著急,然后右上角選擇點(diǎn)模式,我們就能看到刪除了邊和面之后,還有很多的小點(diǎn)剩余下來(lái),我們只需要保留黑色方塊中心的點(diǎn);這里我們?cè)邳c(diǎn)模式下框選黑色方塊中的點(diǎn)后,然后使用Ctrl+I鍵進(jìn)行反向選擇,刪除其他所有的點(diǎn):aFV28資訊網(wǎng)——每日最新資訊28at.com

選擇點(diǎn)選擇點(diǎn)aFV28資訊網(wǎng)——每日最新資訊28at.com

最終我們得到這樣一個(gè)點(diǎn)狀的圖形,將其導(dǎo)出到glb文件即可:aFV28資訊網(wǎng)——每日最新資訊28at.com

最終生成的最終生成的aFV28資訊網(wǎng)——每日最新資訊28at.com

導(dǎo)入模型

我們的模型處理完成后,可以導(dǎo)入到three.js中來(lái)了;我們導(dǎo)入模型后,由于模型的大小和位置可能不是我們需要的,可以對(duì)geometry進(jìn)行縮放、旋轉(zhuǎn)、平移操作,調(diào)整到頁(yè)面上合適的位置即可:aFV28資訊網(wǎng)——每日最新資訊28at.com

const loader = new GLTFLoader();let qrGeometryloader.load("/models/qr.glb", (gltf) => {  const geometry = gltf.scene.children[0].geometry;  geometry    .scale(20, 20, 20)    .rotateX((90 / 180) * Math.PI)    .rotateY((90 / 180) * Math.PI)    .translate(0, 0, -20);  qrGeometry = geometry;});

生成隨機(jī)點(diǎn)

然后就該用到我們的粒子Points了,我們先用隨機(jī)數(shù)生成一堆的粒子,然后將Camera鏡頭放到粒子堆的邊緣進(jìn)行移動(dòng),就可以產(chǎn)生粒子在旋轉(zhuǎn)的效果:aFV28資訊網(wǎng)——每日最新資訊28at.com

const getRandomPos(index) {  const x = Math.random() * 90 - 45;  const y = Math.random() * 90 - 45;  const z = Math.random() * 90 - 45;  return [x, y, z];}const initPoints = () => {  const randomGeometry = new BufferGeometry();  const verticles = [];  for (let i = 0; i < 8000; i++) {    const [x, y, z] = getRandomPos(i)    verticles.push(x, y, z);  }  randomGeometry.setAttribute(    "position",    new Float32BufferAttribute(verticles, 3)  );  const material = new PointsMaterial({    color: 0x333333,    size: 0.8,    map: new TextureLoader().load("gradient.png"),  });  const pt = new Points(randomGeometry, material);  screen.add(pt);  this.pt = pt;};

但是這樣生成出來(lái)的隨機(jī)點(diǎn)呈現(xiàn)出來(lái)是一個(gè)立方體,所以攝像機(jī)在移動(dòng)時(shí)需要掌控好位置,如果距離原點(diǎn)太遠(yuǎn),就會(huì)出現(xiàn)粒子稀疏不同的情況;那么我們優(yōu)化隨機(jī)函數(shù),讓隨機(jī)點(diǎn)生成在一個(gè)橢圓體的范圍內(nèi),這樣相機(jī)在移動(dòng)時(shí)粒子就比較均勻了,不會(huì)出現(xiàn)分布不均的情況;這里引入三維空間下的橢圓計(jì)算公式:aFV28資訊網(wǎng)——每日最新資訊28at.com

橢圓的計(jì)算方程橢圓的計(jì)算方程aFV28資訊網(wǎng)——每日最新資訊28at.com

這里的計(jì)算邏輯也很簡(jiǎn)單,有三個(gè)變量,我們通過(guò)控制變量的方式,先生成Y軸和Z軸的隨機(jī)值,然后套用計(jì)算公式,就可以計(jì)算得到X軸的最大值max,再根據(jù)這個(gè)max值隨機(jī)生成X軸的的坐標(biāo)即可:aFV28資訊網(wǎng)——每日最新資訊28at.com

const getRandomPos = (index) => {  const MAX_Y = 60;  const MAX_Z = 80;  const MAX_X = 80;  const y = Math.random() * MAX_Y * 2 - MAX_Y;  const z = Math.random() * MAX_Z * 2 - MAX_Z;  const max = Math.sqrt(    (1 - Math.pow(y, 2) / MAX_Y / MAX_Y - Math.pow(z, 2) / MAX_Z / MAX_Z) *      MAX_X *      MAX_X  );  const x = Math.random() * max * 2 - max;  return [x, y, z];};

我們看到Y(jié)軸的數(shù)值比X和Z軸都小一點(diǎn),因此整個(gè)橢圓體會(huì)偏扁一點(diǎn),生成出來(lái)的圖形也符合我們的預(yù)期:aFV28資訊網(wǎng)——每日最新資訊28at.com

橢圓體橢圓體aFV28資訊網(wǎng)——每日最新資訊28at.com

這樣,我們的相機(jī)在旋轉(zhuǎn)時(shí)粒子分布就相對(duì)比較均勻了;我們將鏡頭拉到粒子的邊緣,然后繞著邊緣做緩慢的環(huán)繞運(yùn)動(dòng)就可以看到粒子的旋轉(zhuǎn)效果了:aFV28資訊網(wǎng)——每日最新資訊28at.com

const changeCameraView = () => {  new Tween.Tween({    x: 0,  })    .to(      {        x: 80,      },      2400    )    .onUpdate((pos) => {      const { x } = pos;      const z = Math.sqrt(80 * 80 - Math.pow(x, 2));      this.camera.position.x = x;      this.camera.position.z = z;      this.camera.lookAt(new Vector3(0, 0, 0));      this.camera.updateProjectionMatrix();    })    .start();};

模型切換

隨機(jī)粒子生成后,我們就可以將randomGeometry模型轉(zhuǎn)換成我們上面的qrGeometry模型了,引入我們的切換模型函數(shù),這里的函數(shù)在粒子云效果的實(shí)現(xiàn)里面已經(jīng)詳細(xì)解釋了,這里不再贅述了:aFV28資訊網(wǎng)——每日最新資訊28at.com

const changeGeometry = (toArray, duration = 1500) => {  const nowFloatArray = this.pt.geometry.attributes.position.array;  const tos = this.mixFloatArray(nowFloatArray, toArray);  new Tween.Tween({    ...Array.from(nowFloatArray),  })    .to(tos, duration)    .easing(Tween.Easing.Quadratic.InOut)    .onComplete(() => {      this.isChanging = false;    })    .onUpdate((pos) => {      for (let key in pos) {        const val = pos[key];        const idx = Number(key);        this.pt.geometry.attributes.position.array[idx] = val;      }      this.pt.geometry.attributes.position.needsUpdate = true;    })    .start();};

在旋轉(zhuǎn)鏡頭的同時(shí),我們進(jìn)行模型的切換:aFV28資訊網(wǎng)——每日最新資訊28at.com

this.changeCameraView();setTimeout(() => {  this.changeGeometry(qrGeometry.attributes.position.array, 1600);}, 1600);

本文最終的效果可以訪問(wèn)https://gallery.xieyufei.com/about查看aFV28資訊網(wǎng)——每日最新資訊28at.com

總結(jié)

本文根據(jù)前文粒子云的實(shí)現(xiàn)效果,擴(kuò)展了具體如何來(lái)實(shí)現(xiàn)一個(gè)二維碼的粒子化效果;通過(guò)建模工具Blender,可以將我們的二維碼建立模型后導(dǎo)入three.js中;適合網(wǎng)頁(yè)上需要呈現(xiàn)展示二維碼效果的地方。aFV28資訊網(wǎng)——每日最新資訊28at.com

本文鏈接:http://m.www897cc.com/showinfo-26-92164-0.html二維碼還能這么玩?制作一個(gè)3D動(dòng)態(tài)粒子二維碼!

聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。郵件:2376512515@qq.com

上一篇: 45 個(gè)每個(gè)開(kāi)發(fā)人員都應(yīng)該知道的 JavaScript 超級(jí)技巧

下一篇: Python裝飾器泛化公有和私有屬性

標(biāo)簽:
  • 熱門(mén)焦點(diǎn)
Top 日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不
国产精品私拍pans大尺度在线| 奶水喷射视频一区| 日韩午夜在线电影| 在线视频日韩| 性做久久久久久久免费看| 久久精品av麻豆的观看方式 | 亚洲欧美在线免费| 久久久久9999亚洲精品| 欧美激情bt| 国产麻豆综合| 亚洲国产精品123| 在线视频日本亚洲性| 久久九九99视频| 欧美美女bbbb| 国产午夜精品一区二区三区欧美| 亚洲国产另类久久久精品极度| 亚洲一区二区免费在线| 久久久久久电影| 欧美日韩日本国产亚洲在线| 国产亚洲成精品久久| 亚洲精品日韩激情在线电影| 性欧美大战久久久久久久久| 欧美成人中文| 国产欧美一区二区精品忘忧草| 亚洲国产高清在线| 亚洲一区二区毛片| 乱人伦精品视频在线观看| 国产精品不卡在线| 亚洲黄色毛片| 久久av在线看| 欧美日韩中国免费专区在线看| 国产综合亚洲精品一区二| 99re国产精品| 老司机精品视频网站| 国产精品久久久免费| 亚洲国产成人久久综合| 亚洲综合国产| 欧美日韩精品福利| 在线免费精品视频| 欧美一区高清| 国产精品激情偷乱一区二区∴| 米奇777超碰欧美日韩亚洲| 国产精品免费小视频| 91久久精品美女| 欧美一区=区| 欧美性一区二区| 亚洲人成在线播放网站岛国| 久久久99久久精品女同性 | 亚洲激情成人网| 久久国产精品99国产| 国产精品女主播| 日韩视频―中文字幕| 欧美xart系列高清| 国产一区二区0| 亚洲综合另类| 欧美视频网站| 99精品欧美一区二区蜜桃免费| 久久午夜羞羞影院免费观看| 国产亚洲精品久久飘花| 亚洲欧美激情四射在线日 | 欧美日韩在线不卡一区| 亚洲激情社区| 麻豆久久婷婷| 韩国欧美国产1区| 欧美在线视屏| 国产色综合网| 性娇小13――14欧美| 国产精品久久久久天堂| 亚洲无线视频| 国产精品多人| 亚洲自拍偷拍麻豆| 国产精品入口夜色视频大尺度| 亚洲天堂激情| 国产精品xxx在线观看www| 亚洲一区不卡| 欧美午夜久久久| 一区二区三区四区精品| 欧美日韩一级视频| 一区二区国产精品| 欧美三区美女| 中文欧美日韩| 国产精品美女久久福利网站| 亚洲欧美另类久久久精品2019| 国产精品久久久久aaaa| 亚洲女优在线| 国产免费成人av| 欧美在线观看www| 韩国美女久久| 免费在线一区二区| 日韩一二三在线视频播| 欧美视频在线观看视频极品| 在线视频精品| 国产精品一区一区三区| 久久福利一区| 欲色影视综合吧| 欧美风情在线观看| 在线亚洲电影| 国产精品一卡| 欧美综合国产精品久久丁香| 激情欧美一区二区三区在线观看| 可以看av的网站久久看| 亚洲经典在线看| 欧美日韩一区二区高清| 亚洲欧美日韩国产成人精品影院| 国产日韩欧美在线播放不卡| 久久久噜噜噜久噜久久 | 久久黄金**| 尤物在线观看一区| 欧美精彩视频一区二区三区| 亚洲天堂成人在线视频| 国产亚洲精品久久久久久| 狼人天天伊人久久| 夜夜嗨av色综合久久久综合网| 国产精品视频一区二区三区| 久久九九全国免费精品观看| 亚洲欧洲一区二区在线播放| 欧美午夜大胆人体| 久久精品123| 日韩亚洲视频在线| 国产亚洲精品一区二区| 欧美aa在线视频| 亚洲一区日韩在线| 欧美视频免费在线观看| 国内伊人久久久久久网站视频| 久久黄色影院| 亚洲国产精品t66y| 欧美国产激情| 亚洲午夜免费福利视频| 国产曰批免费观看久久久| 美女免费视频一区| 亚洲无玛一区| 黄色一区二区三区| 欧美精品一区在线播放| 午夜精品久久久久久久蜜桃app| 狠狠色丁香久久婷婷综合丁香| 欧美精品一区在线观看| 欧美一级片久久久久久久| 亚洲国产精品一区二区三区| 国产精品久久波多野结衣| 久久久久久亚洲精品不卡4k岛国| 亚洲美女黄色| 国产日韩在线视频| 欧美激情精品久久久久久久变态 | 夜夜嗨av色综合久久久综合网| 国产日韩欧美麻豆| 欧美久久久久中文字幕| 久久国产精品电影| 一区二区三区日韩欧美精品| 黄色综合网站| 国产精品人人做人人爽| 欧美激情1区2区| 久久久久久999| 亚洲综合精品四区| 亚洲人成亚洲人成在线观看图片 | 国一区二区在线观看| 欧美日韩精品一区二区| 久久免费视频观看| 亚洲手机在线| 亚洲激情欧美| 国产视频一区免费看| 欧美视频在线观看 亚洲欧| 美女诱惑一区| 欧美在线观看一区二区| 亚洲天天影视| 亚洲九九九在线观看| 在线观看亚洲专区| 国产日韩欧美中文在线播放| 欧美日韩专区| 欧美激情精品久久久久久免费印度 | 亚洲一本大道在线| 91久久精品视频| 精品999在线播放| 国产精品美女www爽爽爽| 欧美日韩精品在线| 欧美激情一区二区三区不卡| 久久亚洲一区二区| 久久成人免费网| 性欧美超级视频| 亚洲在线观看视频| 中文无字幕一区二区三区| 亚洲美洲欧洲综合国产一区| 亚洲第一区色| 伊人一区二区三区久久精品| 国产小视频国产精品| 国产精品永久免费视频| 国产精品mv在线观看| 欧美日韩一二区| 欧美三级欧美一级| 欧美日韩视频第一区| 欧美激情亚洲一区| 欧美电影在线| 欧美成熟视频| 欧美激情在线有限公司| 欧美福利小视频| 欧美精品麻豆| 欧美日韩播放| 欧美日韩免费在线| 欧美日韩国产欧| 欧美日韩亚洲一区三区 | 欧美jizz19性欧美| 欧美 日韩 国产 一区| 免费在线一区二区| 欧美福利视频| 欧美巨乳在线观看|