在iOS SceneKit中更新几何表面的正确方法是什么?

时间:2016-12-29 16:33:39

标签: ios objective-c swift xamarin.ios scenekit

我知道你可以在第一次将球体或平面添加到场景时通过这样的方式将球体或平面的表面设置为图像。

            UIImage image = UIImage.FromFile("firstimage.jpg");
            Sphere.FirstMaterial.Diffuse.Contents = image;

但是当你想要在用户操作上更新它时...就像点击按钮一样。现在我做这样的事情。

            UIImage newImage = UIImage.FromFile("secondimage.jpg");
//digs through the scnview and the scene, into it's child nodes, finds the geometry and replaces the image      
mySCNView.Scene.RootNode.ChildNodes[0].Geometry.FirstMaterial.Diffuse.Contents = newImage;

但这看起来有点混乱,实际上需要2到3秒才能完成。我并不特别担心数组索引硬编码。

是否有更有效的方法来进行此类更新?

P.S。我为一些看起来很滑稽的代码道歉,这实际上是用Xamarin.iOS编写的,但是可以在Swift或C中自由回答,我会做翻译。

1 个答案:

答案 0 :(得分:0)

听起来你的瓶颈就是将图像传输到GPU上。那么预加载怎么样?在需要之前实例化材料。然后在用户操作时将其交换出来。