我有一个有两架飞机的简单场景。与花纹理和阴影的第一架飞机在背景(墙壁纹理)的飞机上被投下。
我尝试使用表面修饰符 SCNShaderModifierEntryPointSurface ,阴影变得完全不同。现在它不再是花了它自己投下了飞机的阴影。
请参阅附图。
我的代码 花飞机
SCNPlane *planeGeometry = [SCNPlane planeWithWidth:16.0 height:8.0];
SCNNode *planeNode = [SCNNode nodeWithGeometry:planeGeometry];
第一张图片的代码是好的
planeGeometry.firstMaterial.diffuse.contents = [UIImage imageNamed:@"flowerTexture"];
第二张图片的代码不正常
NSString * surfModifier = ...;
planeGeometry.firstMaterial.shaderModifiers = @{SCNShaderModifierEntryPointSurface : surfModifier};
SCNMaterialProperty* diffuseTexture = [SCNMaterialProperty materialPropertyWithContents:[UIImage imageNamed:@"flowerTexture"]];
[planeGeometry.firstMaterial setValue:diffuseTexture forKey:@"mixTexture"];
和surfModifier着色器
uniform sampler2D mixTexture;
#pragma transparent
#pragma body
vec4 originalTexture = texture2D(mixTexture, _surface.diffuseTexcoord);
_surface.diffuse = originalTexture;
请帮助我让第二个工作
感谢
答案 0 :(得分:1)
在渲染花卉平面节点时,将专门应用您的着色器。您基本上是对花卉平面节点进行后处理,之后不会影响对象上的阴影。
解决方案是基本上预处理花卉平面纹理,然后像在示例1中一样将其指定给平面。例如,使用Metal将花卉图像渲染为纹理,您仍然可以修改它使用着色器代码,然后将结果用作Scenekit中花朵平面的纹理。