2016-05-30 4 views
0

基本:

色を一度に変更する必要があるSCNNodeが多数あります。彼らは緑色から青色に行きます。現在、各ノード(緑色と青色)の2つの別々のイメージがあり、すべてのノードのイメージを切り替えようとしています。私のコードは次のとおりです。SceneKit - テクスチャ間の遷移

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

基本的に、私はすべて同じジオメトリを共有する多くのグローバルノード(tube1、tube2、tube3など)を持っています。それらが同じジオメトリを共有するので、1つのノードのマテリアルを変更すると、それらのすべてが一度に変更されます。


問題:

この解決策の唯一の問題は一つもテクスチャを変更すると、アプリケーションが遅くなるということです。テクスチャを変更しようとするとグリッチが発生するチューブ。しかし、すべてを一度に変更するとクラッシュすることになります。


私は何を求めているのですか?

この方法でテクスチャを非効率的に変更していますか? 1つのイメージだけを変更するだけでCPUに負荷がかかる場合は、良い解決策ではないかもしれません。このような画像の色を変更するより良い方法はありますか?

答えて

0

はメモリの問題のようです。これらの地図はどれくらいの大きさですか?メモリ内の多くの画像に読み込もうとすると、アプリはシステムによって強制終了されます。それをプロファイリングしてみましたか?先端のための

diffuse.contents = "BlueTubeTexture" 
+0

ありがとう:

また、次も動作するとUIImageの配分を救うことに注意してください。地図の大きさについては、かなり大きい画像が多数あります。あなたが1x、2x、3xではなくアトリスタに入れれば、より効率的だと思いますか? –

+0

モデルに適用されるテクスチャのアセットカタログが役立つかどうかはわかりません。彼らの画面上の大きさは、あなたが持っているデバイスの王ではなく、オブジェクトに近いところに依存します。画像が正しいサイズであることを確認してください。小さな画面で表示されている場合は小さく、画面に表示される場合は大きくなります。 – mnuages