1、理解粒子
? ? ? ? A、書籍提到的THREE.Particle被THREE.Sprite替換,THREE.Sprite對應的材質(zhì)只有THREE.SpriteMaterial亿眠。
? ? ? ? B、對于每個粒子顏色不同审残,書籍用ParticleSystem實現(xiàn)棠隐,官網(wǎng)沒有ParticleSystem;github用PointCloud實現(xiàn)轻黑,官網(wǎng)也沒有PointCloud糊肤。看官網(wǎng)有Points氓鄙,感覺可以替換PointCloud馆揉,代碼調(diào)整如下:
2、粒子抖拦、粒子系統(tǒng)和BasicParticleMaterial
A升酣、PointsMaterial.size的設(shè)置為0,一樣有點繪制态罪,值小于0的繪制效果與等于0一樣噩茄。
????????B、當PointsMaterial.vextexColors為true且BufferGeometry沒有設(shè)置color時复颈,將無內(nèi)容繪制绩聘。
????????C、調(diào)整PointsMaterial.color的值耗啦,當PointsMaterial.vextexColors為true時凿菩,發(fā)現(xiàn)繪制的顏色是點顏色和color的顏色融合,如color為red的效果:
3帜讲、在CanvasRender類使用HTML5畫布
? ? ? ? A蓄髓、書籍提到的ParticleCanvasMaterial,github用的是SpriteCanvasMaterial舒帮,官網(wǎng)沒有ParticleCanvasMaterial和SpriteCanvasMaterial会喝。對于github用SpriteCanvasMaterial({program: getTexure})要改成SpriteMaterial({map: getTexure})。
????????看github的04-program-based-sprites.html的代碼玩郊,弄不明白getTexure的參數(shù)的ctx怎么來的肢执,感覺代碼走不下去了。在05a-program-based-point-cloud.html看到getTexure的實現(xiàn)译红,SpriteMaterial({map: getTexure})中的getTexure用05a的getTexure替換即可预茄。
????????對比github中chapter-07的05a和05b,這部分的代碼可以參照05b編寫。
4耻陕、在WebGLRenderer中使用HTML5畫布
? ? ? ? A拙徽、對于PointsMaterial.vextexColors為true,BufferGeometry的color有值诗宣,PointsMaterial.color有值膘怕,PointsMaterial.map有內(nèi)容,最終的效果是前三個內(nèi)容的融合召庞。
? ? ? ? B岛心、對于書籍提到的ParticleSystem.sortParticles,Points沒有sortParticles屬性篮灼;對于ParticleSystem.FrustrumCulled忘古,Points的frustumCulled默認值為true。
5诅诱、使用紋理格式化粒子
? ? ? ? A髓堪、看github實現(xiàn)下雨效果的代碼,其通過直接修改Geometry.geometry.vertices中每一項的x娘荡、y來實現(xiàn)旦袋。本地用BufferGeometry.attributes.position來替換Geometry.geometry.vertices,嘗試發(fā)現(xiàn)無法通過調(diào)用每一項的setX和setY來實現(xiàn)下雨效果它改。
????????參照別人實現(xiàn)下雨效果疤孕,調(diào)整代碼如下:
????????下雨動畫調(diào)整如下:
????????發(fā)現(xiàn)整個容器只繪制上部分,如:
????????過一段時間后央拖,將沒有雨滴繪制祭阀。將”sprite.position.y <= 0”改成”sprite.position.y <= -window.innerHeight / 2”可以繪制整個屏幕。
? ? ? ? B鲜戒、SpriteMaterial沒有size屬性专控。
? ? ? ? C、使用Group.children.forEach來實現(xiàn)下雪效果遏餐,children的內(nèi)容不能太多伦腐,本地項目5張圖片各10000份,更改雪花路徑時失都,報警:
6柏蘑、使用精靈
? ? ? ? A、照sprits.html的代碼粹庞,在”WebGLRenderer.render(sceneOrtho, cameraOrtho)”之前咳焚,給WebGLRenderer.autoClear賦值為false,容器的背景被改成白色了庞溜。在autoClear賦值之后WebGLRenderer.setClearColor設(shè)置背景色無效革半。去掉”WebGLRenderer.autoClear = false”,”WebGLRenderer.render(scene, camera)”的內(nèi)容不會繪制。
? ? ? ? B又官、SpriteMaterial.map.offset的值小于0和大于1將會內(nèi)容繪制延刘。數(shù)值的更改可以通過”SpriteMaterial.map.offset = new THREE.Vector2(x, y)”或”SpriteMaterial.map.offset.set(x, y)”實現(xiàn)。
? ? ? ? C六敬、SpriteMaterial.map.repeat的值大于0小于1碘赖,得到的圖片的裁剪效果;小于0將不繪制觉阅。數(shù)值更改同B部分崖疤。
? ? ? ? D秘车、Sprite.scale的值可以設(shè)置為負值典勇,效果與絕對值相同的正值一樣。
? ? ? ? E叮趴、對于TexureLoader().load的圖片割笙,對于offset和repeat的設(shè)置只能有一種,如下圖是對sprits-3D.html代碼的改寫
????????發(fā)現(xiàn)繪制的圖形始終只有一種眯亦,將SpriteImg的賦值放入single內(nèi)才能得到多個圖形伤溉。
7、從高級幾何體中創(chuàng)建例子系統(tǒng)
? ? ? ? A妻率、使用Points替換github的PointClound乱顾,繪制效果與github相差大
????????以為是context繪制的fillReact不是arc導致的,將本地的代碼調(diào)整宫静,發(fā)現(xiàn)還是一樣的走净。將Points的實現(xiàn)改成Group,調(diào)整代碼如下:
????????刷新后孤里,可以繪制漸變圓形了伏伯,但是有黑色的背景色:
????????以為是canvas繪制的問題,但看有的說法是canvas的背景色本來就是透明的捌袜,嘗試發(fā)現(xiàn)確實是這樣的说搅。調(diào)整THREE容器的背景色,SpriteMaterial中圖形的背景色也改了:
????????調(diào)整SpriteMaterial.blending的值虏等,感覺繪制效果都不是很好弄唧。
????????將Group的實現(xiàn)改回Points,用BufferGeometry作為其第一個參數(shù)霍衫,PointsMaterial的map可以繪制一個漸變的圓形套才。調(diào)整PointsMaterial.blending的值,發(fā)現(xiàn)繪制效果也沒好到哪里去慕淡。背伴。。
????????之前PointsMaterial和SpriteMaterial的map內(nèi)容為TexureLoader().load加載的圖片時,沒有感覺到圖片有背景色傻寂,仔細對比map為img和canvas時息尺,Texture和Material對象的屬性有什么不同,多次嘗試疾掰,發(fā)現(xiàn)將PointsMaterial和SpriteMaterial的depthTest屬性設(shè)置為false就可以搂誉,效果如下: