2016-05-30 134 views
0

基本知識:

我有許多需要一次更改顏色的SCNNode。他們從綠色變爲藍色。目前,我爲每個節點(一個綠色和另一個藍色)有兩個單獨的圖像,並且我試圖爲所有節點切換圖像。這裏是我的代碼:SceneKit - 紋理之間的轉換

let blueTubeTexture = UIImage(named: "BlueTubeTexture") 
self.tube1.geometry!.firstMaterial!.diffuse.contents = blueTubeTexture 

基本上,我有許多全球性的節點(tube1,tube2,tube3等)都有着相同的幾何形狀。由於它們共享相同的幾何體,因此更改一個節點的材質會一次更改所有這些材質。


問題:

這種解決方案的唯一的問題是,改變甚至一個紋理減慢應用程序。當我嘗試改變管子的紋理時,它會出現毛刺。但是立即改變它們會導致崩潰。


我要問什麼?

以這種方式改變紋理效率低下嗎?如果只改變一張圖像會給CPU帶來很大壓力,那麼這可能不是一個好的解決方案。有沒有更好的方法來改變圖像的顏色?

回答

0

看起來像內存問題。這些地圖有多大?如果你嘗試加載到內存中的許多圖像,你的應用程序將被系統殺死。你有沒有試過分析它?

另外請注意,以下也將工作,將節省的UIImage分配:

diffuse.contents = "BlueTubeTexture" 
+0

謝謝你的提示。至於地圖的大小,有很多圖像,每個都相當大。如果我將它們放入地圖集而不是1x,2x和3x,您認爲它會更有效嗎? –

+0

我不確定資產目錄有助於應用於模型的紋理。它們在屏幕上的大小取決於你靠近物體,而不是你擁有的設備之王。只要確保您的圖像尺寸正確。當它們在屏幕上顯得較小時較小,當它們在屏幕上較大時較大。 – mnuages