Модификатор шейдера SceneKit не изменяет положение геометрии

#ios #swift #shader #scenekit

#iOS #swift #шейдер #scenekit

Вопрос:

Я пытаюсь применить простой модификатор шейдера для перемещения положения куба. Обычный рассеянный цвет куба — светло-голубой, но с этим модификатором он становится красным, поэтому я знаю, что модификатор шейдера работает (в некоторой степени). Однако куб остается в центре экрана в позиции (0,0,0), поэтому позиция не изменяется модификатором шейдера. Есть идеи?

Вот код

           let modifier = """
          _surface.diffuse = float4(1,0,0,1);
          _surface.position = float3(10.0,0.0,0.0);
          """
          
          cube.geometry?.shaderModifiers = [SCNShaderModifierEntryPoint.surface : modifier]
  

Ответ №1:

Пурпурный оттенок — это способ SceneKit указать, что шейдеру не удалось скомпилировать.

_surface.position = float3(10.0,0.0,0.0);

Смотрю на SCNShadable.h мы видим, что SCNShaderSurface s position — это a float4 , а не a float3 .

Комментарии:

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

2. это a float3 в вашем коде, но SceneKit ожидает a float4 , см. SCNShadable.h

3. это то, что я вижу в _surface структуре в SCNShadable.h float3 position; // Position of the fragment