La documentazione per SCNMaterialProperty.contents
indica che si tratta di una proprietà animabile e infatti è possibile eseguire un crossfade tra due colori. Tuttavia non riesco a dissolvenza incrociata tra due immagini.SceneKit - Texture proprietà materiale crossfade
Quindi sto iniziando a chiedermi se è possibile o se devo creare uno shader personalizzato per questo?
ho provato un'animazione implicita, nel qual caso si mostra subito il 'dopo' immagine:
node.geometry.firstMaterial.diffuse.contents = [UIImage imageNamed:@"before"];
[SCNTransaction begin];
[SCNTransaction setAnimationDuration:5];
node.geometry.firstMaterial.diffuse.contents = [UIImage imageNamed:@"after"];
[SCNTransaction commit];
Un'animazione esplicita, che non fa nulla:
CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"contents"];
animation.fromValue = (__bridge id)[UIImage imageNamed:@"before"].CGImage;
animation.toValue = (__bridge id)[UIImage imageNamed:@"after"].CGImage;
animation.duration = 5;
[node.geometry.firstMaterial.diffuse addAnimation:animation forKey:nil];
Così come attraverso un CALayer
, che non fa nulla:
CALayer *textureLayer = [CALayer layer];
textureLayer.frame = CGRectMake(0, 0, 793, 1006);
textureLayer.contents = (__bridge id)[UIImage imageNamed:@"before"].CGImage;
node.geometry.firstMaterial.diffuse.contents = textureLayer;
CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"contents"];
animation.fromValue = (__bridge id)[UIImage imageNamed:@"before"].CGImage;
animation.toValue = (__bridge id)[UIImage imageNamed:@"after"].CGImage;
animation.duration = 5;
[textureLayer addAnimation:animation forKey:nil];
Si è tentato di animare una modifica tra due materiali, anziché tra due valori di contenuto per la stessa proprietà materiale? – rickster