#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 ожидает afloat4
, см. SCNShadable.h3. это то, что я вижу в
_surface
структуре вSCNShadable.h
—float3 position; // Position of the fragment