我建議使用SKShader
來應用簡單的陰影效果。
您需要創建一個帶有.fsh
擴展名的空文件,我們使用shader.fsh
。着色器代碼將生成一個z
屬性,該屬性是基於每個像素到圖像中心的距離的「僞」深度。使用z
,它計算一個正常,陰影強度是普通和光位置的點積(這裏我放置了光線在場景的左上角):
void main()
{
vec2 coord = (v_tex_coord - 0.5) * 2.0;
if (length(coord) > 1.0) {
discard;
}
vec3 diffuseColor = SKDefaultShading().rgb;
vec3 lightPosition = normalize(vec3(-1.0, 1.0, 1.0));
float z = sqrt(1.0 - coord.x * coord.x - coord.y * coord.y);
vec3 normal = normalize(vec3(coord.x, coord.y, z));
float shadow = max(0.0, dot(normal, lightPosition));
diffuseColor *= shadow;
gl_FragColor = vec4(diffuseColor, 1.0);
}
您現在可以樹蔭這樣的形狀節點:
let ball = SKShapeNode(circleOfRadius: 50)
ball.fillColor = .yellow()
ball.strokeColor = .clear()
ball.fillShader = SKShader(fileNamed: "shader.fsh")
..和,爲你的精靈節點,只需將shader
屬性:
ball.shader = SKShader(fileNamed: "shader.fsh")
然後使用該圖片:
陰影的版本是這樣的:
乾杯!
西蒙
如果添加陰影成球的孩子,你會不會擔心的位置,但你將不得不修正球的旋轉。我有一段時間沒有使用SpriteKit,但應該有可能查詢球的旋轉,並應用與陰影相反的角度... –