2016-12-29 7 views
1

Я знаю, что вы можете установить поверхность сферы или плоскости как изображение, сделав что-то подобное, когда вы сначала добавите его в сцену.Каков правильный способ обновления поверхности геометрии в iOS SceneKit?

  UIImage image = UIImage.FromFile("firstimage.jpg"); 
      Sphere.FirstMaterial.Diffuse.Contents = image; 

Но как насчет того, когда вы хотите обновить его под действием пользователя ... например, при нажатии кнопки. Прямо сейчас я делаю что-то вроде этого.

  UIImage newImage = UIImage.FromFile("secondimage.jpg"); 
//digs through the scnview and the scene, into it's child nodes, finds the geometry and replaces the image  
mySCNView.Scene.RootNode.ChildNodes[0].Geometry.FirstMaterial.Diffuse.Contents = newImage; 

Но это кажется грязным и на самом деле занимает около 2 или 3 секунд. Я не особо беспокоюсь о жестком коде индекса массива.

Есть ли более эффективный способ сделать этот вид обновления?

P.S. Я прошу прощения за некоторые забавные строки кода, это на самом деле написано на Xamarin.iOS, но не стесняйтесь отвечать в Swift или C, и я сделаю перевод.

+0

Какая часть идет медленно? Загрузка изображения, поиск узла или обновление материала? –

+0

обновление материала –

ответ

0

Похоже, что ваше узкое место - это передача изображения на графический процессор. Итак, как насчет предварительной загрузки? Создайте материал перед тем, как он вам понадобится. Затем замените его на действие пользователя.

+0

Я мог бы попробовать это, но стоит отметить, что новое изображение управляется выбором пользователя, который не предсказуем. Тем не менее, хороший совет, тем более, что я не представил эту деталь изначально. –