1、簡單表面的MeshBasicMaterial
? ? ? ? A、報錯:
? ?????????查找官網(wǎng)沒有發(fā)現(xiàn)CanvasRenderer,找了很久也沒有發(fā)現(xiàn)可以替換其的內(nèi)容。
? ? ? ? B栈戳、報錯:
????????定位代碼Gui.add(controls, ‘overdraw’)失敗,看信息controls.overdraw的值為undefined难裆,感覺跟這個有關(guān)子檀。controls.overdraw的值從meshMaterial而來,打印信息乃戈,發(fā)現(xiàn)MeshBasicMaterial沒有屬性overdraw褂痰。
????????看之前的打印信息,controls.wireframeLineJoin的值也是undefined症虑,但是其并沒有阻塞Gui的渲染缩歪。打印的MeshBasicMaterial對應(yīng)的屬性名是wireframeLinejoin。
????????對于wireframeLineWidth谍憔,controls.wireframeLineWidth的值理應(yīng)也是undefined的匪蝙,應(yīng)該MeshBasicMaterial對應(yīng)的屬性名為wireframeLinewidth。但controls.wireframeLineWidth的值為1习贫。
? ? ? ? C逛球、調(diào)整wireframeLinewidth的值,繪制效果無變化苫昌。子線閱讀官網(wǎng)內(nèi)容颤绕,有說明無論如何設(shè)置,其繪制的寬度始終是1祟身。
? ? ? ? D奥务、調(diào)整MeshBasicMaterial.side的值,發(fā)現(xiàn)其繪制效果無變化袜硫。查看打印信息氯葬,MeshBasicMaterial.side的類型是整數(shù)。開始以為是THREE.FrontSide等的類型不同父款,打印THREE.FrontSide發(fā)現(xiàn)其也是整數(shù)溢谤。對于材質(zhì)面的理解瞻凤,個人以為像紙有正反面,個人以為MeshBasicMaterial.side設(shè)置為正面和反面的繪制效果應(yīng)該是不同的世杀。
????????后面發(fā)現(xiàn)阀参,是立方體和球體設(shè)置MeshBasicMaterial.side沒有效果,對于PlaneGeometry的物體的效果是不同的瞻坝。
2蛛壳、基于深度著色的MeshDepthMaterial
? ? ? ? A、調(diào)整camera.near和camera.far的值所刀,發(fā)現(xiàn)繪制效果無變化衙荐。
3、聯(lián)合材質(zhì)
? ? ? ? A浮创、書籍上說忧吟,需要縮小帶有MeshDepthMaterial材質(zhì)的網(wǎng)格,因為它們會直接在彼此上渲染導(dǎo)致畫面有閃爍斩披。本人沒有加上該行代碼溜族,觀察渲染,并未發(fā)現(xiàn)閃爍垦沉。
4煌抒、計算法向量顏色的MeshNormalMaterial
? ? ? ? A、本地代碼報錯:
????????對應(yīng)代碼部分厕倍,即sphere.geometry.faces.length寡壮,參照之前部分的內(nèi)容,感覺其用sphere.geometry.attributes.position.count替換讹弯。
? ? ? ? B况既、本地代碼報錯:
????????對應(yīng)代碼部分,即”let face = sphere.geometry.faces[f]”组民。因和書籍的版本相差較大坏挠,感覺添加ArrowHelper要改寫。
????????根據(jù)別人的文章調(diào)整邪乍,代碼如下:
? ? ? ? C、本地代碼報警:
????????根據(jù)告警內(nèi)容对竣,感覺MeshNormalMaterial不需要設(shè)置顏色庇楞。調(diào)整MeshNormalMaterial構(gòu)造時,傳入color的值否纬,發(fā)現(xiàn)繪制效果無變化吕晌。
? ? ? ? D、調(diào)整MeshNormalMaterial.shading的值临燃,繪制效果無變化睛驳,根據(jù)打印信息烙心,發(fā)現(xiàn)其沒有改屬性。打印THREE.FlatShading和THREE.SmoothShading的值乏沸,發(fā)現(xiàn)都是undefined淫茵。
5、為每個面指定材質(zhì)的MeshFaceMaterial
? ? ? ? A蹬跃、查看官網(wǎng)匙瘪,沒有發(fā)現(xiàn)MeshFaceMaterial。參照別人的文章A——實現(xiàn)立方體不同面設(shè)置不同材質(zhì)蝶缀,調(diào)整代碼實現(xiàn)書籍的魔方旋轉(zhuǎn)代碼如下:
????????看文章A有提到MultiMaterial的實現(xiàn)方式丹喻,查了下官網(wǎng),沒有發(fā)現(xiàn)MultiMaterial翁都。
5碍论、用于暗淡、不光亮表面的MeshLambertMaterial
? ? ? ? A柄慰、本地代碼報錯:
????????定位報錯代碼在”ambient: meshMaterial.ambient.getHex()”鳍悠,根據(jù)打印信息,MeshLambertMaterial沒有屬性ambient先煎。查看官網(wǎng)沒有發(fā)現(xiàn)可以替代的屬性贼涩。
????????B、調(diào)整MeshLambertMaterial.wrapAround的值薯蝎,繪制無變化遥倦,根據(jù)打印信息發(fā)現(xiàn)沒有改屬性。注意到MeshLambertMaterial也沒有屬性wrapRGB占锯。
6袒哥、用于光亮表面的MeshPhongMaterial
? ? ? ? A、同5小點的A部分消略。
? ? ? ? B堡称、同5小點的B部分。
? ? ? ? C艺演、MeshPhongMaterial.specular的值趨近黑色時却紧,調(diào)整MeshPhongMaterial.shiness的值繪制效果無明顯變化,材質(zhì)MeshPhongMaterial的繪制效果和MeshLambertMaterial相近胎撤,需要將MeshPhongMaterial.specular設(shè)置為明顯的顏色晓殊,MeshPhongMaterial.shiness的值小于20 才有明顯差別。
????????MeshPhongMaterial.shiness的值越大伤提,MeshPhongMaterial.specular的顏色越聚攏在一起巫俺。
? ? ? ? D、調(diào)整MeshPhongMaterial.metal的值肿男,繪制效果無明顯變化介汹,根據(jù)打印信息發(fā)現(xiàn)沒有改屬性却嗡。
7、用ShaderMaterial創(chuàng)建自己的著色器
? ? ? ? A嘹承、本地代碼報警:
????????去看了下源碼窗价,發(fā)現(xiàn)源碼確實沒有這個屬性,對比官網(wǎng)上ShaderMaterial的屬性赶撰,沒有可以將其替換的舌镶。
? ? ? ? B、本地代碼報錯:
????????定位代碼位置”cube.material.materials.forEach”豪娜,根據(jù)打印信息餐胀,將其換成”cube.material.forEach”。
? ? ? ? A否灾、本地代碼報警:
????????根據(jù)打印信息,用linewidth替換鸣奔。
? ? ? ? B墨技、本地代碼報警:
????????打印賦值給vertexColos的THREE.VertexColors,其值為undefined挎狸。根據(jù)打印信息扣汪,LineBasicMaterial.vertexColos的類型為Boolean,將THREE.VertexColors改成true锨匆。
????????C崭别、改完A、B部分恐锣,頁面無線條繪制茅主。猜測LineBasicMaterial.vertexColos的值影響了,將其設(shè)置為false土榴,刷新頁面還是沒線條繪制诀姚。根據(jù)8小點D部分,調(diào)整線條點的處理部分:
????????刷新頁面后玷禽,線條出來了赫段,不過線條的顏色都是白色。根據(jù)打印信息矢赁,LineBasicMaterial沒有colors屬性瑞佩,其color屬性無法接受THREE.Color數(shù)組。猜測將LineBasicMaterial.vertexColos設(shè)置為true坯台,LineBasicMaterial.color就可以接受THREE.Color數(shù)組了,刷新頁面后瘫寝,線條不繪制了蜒蕾。稠炬。。
????????查看別人實現(xiàn)線條漸進(jìn)色咪啡,看了下BufferGeometry的打印信息首启,BufferGeometry.attributes并沒有屬性color,無法通過”LineBasicMaterial.vertexColos.color=”來賦值撤摸,感覺可以和設(shè)置點位置一樣通過setAttribute來設(shè)置毅桃。看了下BufferGeometry.js文件准夷,看到有”setAttribute(‘position’,...)”的調(diào)用钥飞,沒有看到”setAttribute(‘color,...)”,感覺可能不行衫嵌《林妫看了幾篇線條的漸進(jìn)色,發(fā)現(xiàn)他們也是用”setAttribute(‘color,...)”來實現(xiàn)的楔绞,調(diào)整下線條顏色的相關(guān)代碼為:
????????發(fā)現(xiàn)繪制的線條還是白色的结闸,后面注意到LineBasicMaterial.vertexColos的值是false,將其改為true酒朵,刷新頁面就可以了桦锄。對比github的效果,本地的顏色偏淡蔫耽。
????????D结耀、調(diào)整opacity的值,發(fā)現(xiàn)繪制無變化针肥,以為LineBasicMaterial沒有改屬性饼记,根據(jù)打印信息確實有該屬性。想起書籍之前提到慰枕,要調(diào)整opacity的值具则,需要將transparent的值設(shè)置為true,設(shè)置好后具帮,發(fā)現(xiàn)設(shè)置opacity不同的值博肋,繪制效果不同了。
? ? ? ? E蜂厅、調(diào)整linewidth的值匪凡,繪制效果無變化。根據(jù)官網(wǎng)了解到linewidth屬性同wireframeLinewidth一樣掘猿。
? ? ? ? A、本地代碼報錯:
????????根據(jù)報錯,BufferGeometry沒有computeLineDistances方法衬衬。根據(jù)官網(wǎng)买猖,沒有找到合適的替換方法。
????????B滋尉、調(diào)整dashSize玉控、gapSize、scale的值狮惜,繪制效果都無變化且與LineBasicMaterial的效果高诺。對比別人LineDashedMaterial的實例,發(fā)現(xiàn)computeLineDistances是THREE.Line的方法碾篡,需要被執(zhí)行虱而,虛線才可以被繪制出來。