2015-04-21 2 views
1

У меня есть куб (округленный) и вы хотите отобразить текстуру на одной из ее сторон. Я могу получить доступ к материалам на той стороне с:SceneKit - Текстуры не отображаются должным образом

var tex1: SCNMaterial! = cube.geometry?.materialWithName("_1")! 

Затем я его содержимое изображения:

tex1.diffuse.contents = "cube1" 

Это будет выглядеть следующим образом:

cube with texture

Это показывает мне, что он работает, но белая часть не находится в центре, как это должно быть. (Изображение, которое я использую, имеет белую часть в центре.)
Я попытался использовать смещение, чтобы перемещать изображение вокруг на поверхности, я хотел бы также масштабировать его. Я пробовал так:

tex1.diffuse.contents.offset = SCNVector3Make(20, 0, 0) 

Это дает мне ошибки: он говорит, что не может присвоить результат этого выражения. (Я также попытался contentMode, те же ошибки, я думаю, потому что это для пользовательского интерфейса, не SCN)

Вопросов

  1. Кто-нибудь знает, что я могу сделать?
  2. Возможно, смещение - это не путь?
  3. Как я могу масштабировать изображение?

ответ

3

Тип свойство материала-х contents является AnyObject, что означает, что компилятор позволит вызвать любой метод (определяется на любом типе объекта) на нем. Это не означает, что все методы или аксессоры свойств действительно реально реализованы фактическим классом, который находится в вашем конкретном contents.

Свойства материала имеют опцию contentsTransform. Вы посмотрели на это?

+0

Спасибо за ответ. Не могли бы вы предоставить мне немного больше информации, пожалуйста? Я решил масштабировать с помощью 'myMat.diffuse.contentsTransform = SCNMatrix4MakeScale (1.5, 1.5, 1.5)', а также переведен с помощью 'myMat.diffuse.contentsTransform = SCNMatrix4MakeTranslation (0, -0.05, 0). Но когда я делаю перевод, он удаляет масштабирование. Есть идеи? Странно то, что мои изображения, которые я использую, имеют квадрат, и поэтому я думал, что он будет просто соответствовать автоматически. – LinusGeffarth

+1

'MakeScale' дает вам матрицу преобразования. 'MakeTranslation' также дает вам матрицу преобразования. [Как вы комбинируете преобразования?] (Https://en.m.wikipedia.org/wiki/Transformation_matrix) Подсказка: есть функция «SCNMatrix4» или две, которая берет пару матриц и возвращает новую. – rickster

+0

вот мое решение: myMat.diffuse.contentsTransform = SCNMatrix4Mult (SCNMatrix4MakeScale (1.5, 1.5, 1.5), SCNMatrix4MakeTranslation (0, -0.05, 0)) работает очень хорошо – Tritmm

0

Вот мое решение: создают смещение:

let offsetVal = SCNMatrix4MakeTranslation(0, -0.05, 0) 

создать шкалу:

let scaleVal = SCNMatrix4MakeScale(1.5, 1.5, 1.5) 

, если вы хотите установить Offset Свойство только:

material.diffuse.contentsTransform = offsetVal 

если вы хотите комплект Масштабируемое имущество:

material.diffuse.contentsTransform = scaleVal 

если вы хотите смешать их:

надеюсь, что это полезно !!!

Смежные вопросы