一些想法:
烤小紋理爲texture atlas讓你有一個UV集(如果不止一個地圖集需要,你可以在一個WebGL的程序使用多個紋理採樣)在單一的平面瓷磚。
計算飛機的UV對應於與這些UV形狀頂點和樣本紋理地圖的世界POS。爲此,您可能需要傳遞以塑造材質平面的模型矩陣(如果知道其方向,則只是縮放/偏移量,或者如果平面固定,則爲空)。
請記住,你不需要對小青瓦高分辨率紋理。還圖譜可以通過使瓷磚紋理(從與正投影頂部) 或通過使紋理的單獨採樣代替。關於最後一種情況:要確定要傳遞哪些紋理,可以測試形狀與地圖切片的邊界框。
渲染用簡單的材料,你的形狀到紋理和您畫的飛機使用質地面膜在主要關口。
詳細上:
廣場的形狀要在單獨的容器和render it to a fixed size texture掩蓋用非常簡單的材料(寫白字到處)與普通相機。在渲染過程之後,您應該在屏幕上看到黑色和白色形狀的紋理(但會縮放爲方形紋理)。
之後渲染場景的其餘部分傳遞給瓷磚材質遮罩紋理。在fragmentPos作爲uv的片段着色器樣本遮罩紋理中,只有在得到白色時才繪製片段(否則放棄)。可能不是最好的主意(丟棄是昂貴的)。
更好的版本深度掩模方法的:在屏蔽通過禁用顏色寫作(renderer.context.colorMask(false, false, false, false);
)。之後,你應該有你的形狀在深度緩衝。然後將顏色掩碼重置爲全部true
,集合renderer.autoClearDepth = false
,集合tileMaterial.depthFunc = THREE.GreaterDepth
(more about depthFunc)。然後渲染你的瓷磚。這應該完成這項工作。
它也可以通過將掩碼深度寫入depthTexture並僅將其用作主通道中的紋理來完成。掩蔽
使用模板緩存:我沒有嘗試過,但它應該是適合你的情況。例如:1,2。想法與上面描述的掩蔽類似。
只是一個想法,最可能不是很有效。難道你不能按照需要的順序在2D畫布上繪製所有紋理,然後簡單地在多邊形上映射一個紋理? – uhura
是個好主意。我想我會嘗試渲染紋理。它對我的基本用例應該足夠高效。儘管如此,它似乎仍然過於複雜 – rawbeans