SCNMaterialProperty.contents
के लिए प्रलेखन बताता है कि यह एक एनिमेटेबल संपत्ति है और वास्तव में मैं दो रंगों के बीच एक क्रॉसफ़ेड कर सकता हूं। हालांकि मैं दो छवियों के बीच क्रॉसफैड करने में असमर्थ हूं।सीनकेट - क्रॉसफ़ेड सामग्री संपत्ति बनावट
तो मुझे आश्चर्य है कि यह संभव है या नहीं, अगर मुझे इसके लिए कस्टम शेडर बनाना है?
मैं एक अंतर्निहित एनीमेशन, जिस स्थिति में इसे तुरंत पता चलता कोशिश की है छवि 'के बाद':
node.geometry.firstMaterial.diffuse.contents = [UIImage imageNamed:@"before"];
[SCNTransaction begin];
[SCNTransaction setAnimationDuration:5];
node.geometry.firstMaterial.diffuse.contents = [UIImage imageNamed:@"after"];
[SCNTransaction commit];
एक स्पष्ट एनीमेशन, जो कुछ नहीं करता है:
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];
साथ ही CALayer
के माध्यम से, जो कुछ भी नहीं करता है:
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];
क्या आपने एक ही भौतिक संपत्ति के लिए दो सामग्रियों के मूल्यों के बजाय दो सामग्रियों के बीच परिवर्तन को एनिमेट करने का प्रयास किया है? – rickster