我可以使用PNG序列作为SceneKit对象上的动画材质吗?

Jos*_*les 3 3d animation ios scenekit

我想以编程方式更改使用iOS中的SceneKit渲染的对象的材质。但是我想使用动画图像文件。PNG序列在iOS中可以很好地用于UIImageViews之类的东西-如何将它们用作SceneKit中的材料?

这样的事情工作:

floor.firstMaterial.diffuse.contents = [UIImage animatedImageNamed:@"ANIMATION_" duration:6.0f];
Run Code Online (Sandbox Code Playgroud)

谢谢!

PKC*_*oft 5

有一个更简单的解决方案(或者至少我认为它更简单),尽管我无法证明它是否更有效。我已经在iPad mini(第一代)上对其进行了测试,并且效果很好。

您可以在其中放置一个SKScene对象,而不是在材质的内容中放置一个Spritesheet的纹理(并用着色器摆弄)。

这样,您就可以在SKScene中使用SKSpriteNode对象,并使用SCNAction对象为其设置动画。然后,无需触摸着色器代码即可轻松,强大地控制所有动画。

    NSArray<SKTexture*> *cursorTextures =
    @[
      [SKTexture textureWithImageNamed:@"tilecursor1.png"],
      [SKTexture textureWithImageNamed:@"tilecursor2.png"],
      [SKTexture textureWithImageNamed:@"tilecursor3.png"],
      [SKTexture textureWithImageNamed:@"tilecursor4.png"],
      [SKTexture textureWithImageNamed:@"tilecursor5.png"]
      ];

    SKSpriteNode *cursorSprite = [SKSpriteNode spriteNodeWithTexture:cursorTextures[0]];
    cursorSprite.position = CGPointMake(cursorSprite.size.width/2.0, cursorSprite.size.height/2.0);
    [cursorSprite runAction:[SKAction repeatActionForever:[SKAction animateWithTextures:cursorTextures timePerFrame:0.1]]];

    SKScene *cursorScene = [SKScene sceneWithSize:cursorSprite.size];
    cursorScene.backgroundColor = [UIColor clearColor];
    [cursorScene addChild:cursorSprite];

    ...

    self.cursor.material.diffuse.contents = cursorScene;
Run Code Online (Sandbox Code Playgroud)


mnu*_*ges 4

没有任何东西可以开箱即用。

我会使用着色器修改器来做到这一点。如果将所有图像打包在单个图像中,则可以使用修改器(在入口SCNShaderModifierEntryPointGeometry点)根据 更新对象的纹理坐标,u_time以便每隔t ms 使用另一个图像(或图集的子图像)。