SCNBox — наложение текстуры на пять из шести сторон.

Я пытаюсь создать что-то вроде холста в SceneKit, используя SCNBox, с UIImage, обернутым вокруг одной поверхности и на четырех других, прилегающих к ней.

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

Может ли кто-нибудь направить меня в правильном направлении здесь? У коробки будет отдельная текстура/материал на стороне, противоположной передней.

введите здесь описание изображения


person Luke    schedule 13.11.2020    source источник
comment
Возможно, вы уже знаете, как это работает, но если нет, вот хороший пост о кубических картах: Этот пост: 29678510. Я не видел, чтобы кто-то делал это, не разрезая изображение.   -  person Voltan    schedule 22.11.2020


Ответы (2)


Вы можете использовать свойство contentsTransform из SCNMaterialProperty для настройки необходимых координат текстуры с вашего изображения на SCNBox

Некоторые пояснения на упрощенном примере:

Предположим, вы используете куб и у вас есть такая текстура введите здесь описание изображения

Разделив его на прямоугольники, вы получите введите здесь описание изображения

Вы хотите пропустить прямоугольники 1, 3, 7, 9 и покрыть куб этой текстурой. Для этого просто нормализуйте размер стороны от вашего SCNBox между 0 и 1 и используйте его для установки масштаба и преобразования в матрицу contentsTransform.

У меня в примере есть куб с равными сторонами - так что это будет третья часть всей текстуры. Для взятия прямоугольника 5 из текстуры

let normalizedWidth = 1/3
let normilizedHeight = 1/3

let xOffset = 1 //skip 1,4,7 line
let yOffset = 1 //skip 1,2,3 line
let sideMaterial = SCNMaterial()
sideMaterial.diffuse.contents = textureImage
let scaleMatrix = SCNMatrix4MakeScale(normalizedWidth, normilizedHeight, 0.0)
sideMaterial.diffuse.contentsTransform = SCNMatrix4Translate(scaleMatrix, 
normalizedWidth * xOffset, yOffset * yOffset, 0.0)

Вы можете заполнить 5 сторон настроенными материалами, а последнюю (сзади) просто цветом и установить их в materials свойство вашего SCNBox. В результате у вас будет

введите здесь описание изображения

person ATV    schedule 25.11.2020

Вероятно, самым простым способом было бы создать пользовательскую геометрию с соответствующими координатами текстуры, используя +geometryWithSources:elements:< /а>

person mnuages    schedule 23.11.2020