Xamarin.iOS'ta SceneKit
SceneKit, 3B grafiklerle çalışmayı kolaylaştıran bir 3B sahne grafı API'sidir. İlk olarak OS X 10.8'de tanıtıldı ve şimdi iOS 8'e geldi. SceneKit, çevreleyici 3B görselleştirmeler ve gündelik 3B oyunlar oluştururken OpenGL'de uzmanlık gerektirmez. Yaygın sahne grafı kavramlarını temel alan SceneKit, OpenGL ve OpenGL ES'nin karmaşıklıklarını soyutlayarak bir uygulamaya 3B içerik eklemeyi çok kolaylaştırır. Ancak, bir OpenGL uzmanıysanız, SceneKit doğrudan OpenGL ile bağlama için de büyük desteğe sahiptir. Ayrıca fizik gibi 3B grafikleri tamamlayan ve Core Animation, Core Image ve Sprite Kit gibi diğer birçok Apple çerçevesiyle çok iyi bir şekilde tümleşen çok sayıda özellik içerir.
SceneKit ile çalışmak son derece kolaydır. İşlemeyi üstleyen bildirim temelli bir API'dir. Bir sahneyi ayarlamanız, özellikler eklemeniz yeterlidir ve SceneKit sahnenin işlenmesini işler.
SceneKit ile çalışmak için sınıfını SCNScene
kullanarak bir sahne grafiği oluşturursunuz. Bir sahne, 3B alanda konumları tanımlayan örnekleriyle temsil edilen bir düğüm hiyerarşisi SCNNode
içerir. Her düğüm, aşağıdaki şekilde gösterildiği gibi görünümünü etkileyen geometri, aydınlatma ve malzemeler gibi özelliklere sahiptir:
Sahne Oluşturma
Bir sahnenin ekranda görünmesini sağlamak için SCNView
görünümün Scene özelliğine atayarak görünümüne eklersiniz. Ayrıca, sahnede herhangi bir değişiklik yaparsanız, SCNView
değişiklikleri görüntülemek için kendisini güncelleştirir.
scene = SCNScene.Create ();
sceneView = new SCNView (View.Frame);
sceneView.Scene = scene;
Sahneler, 3b modelleme aracıyla dışarı aktarılan dosyalardan veya geometrik temel öğelerden program aracılığıyla doldurulabilir. Örneğin, bir kürenin nasıl oluşturulacağı ve sahnenin içine nasıl ekleneceği aşağıda verilmiştir:
sphere = SCNSphere.Create (10.0f);
sphereNode = SCNNode.FromGeometry (sphere);
sphereNode.Position = new SCNVector3 (0, 0, 0);
scene.RootNode.AddChildNode (sphereNode);
Işık Ekleme
Bu noktada küre hiçbir şey görüntülemez çünkü sahnede ışık yoktur. SCNLight
Düğümlere örnek eklemek SceneKit'te ışık oluşturur. Çeşitli yönlü aydınlatma biçimlerinden ortam aydınlatmasına kadar çeşitli ışık türleri vardır. Örneğin aşağıdaki kod kürenin yanında çok yönlü bir ışık oluşturur:
// omnidirectional light
var light = SCNLight.Create ();
var lightNode = SCNNode.Create ();
light.LightType = SCNLightType.Omni;
light.Color = UIColor.Blue;
lightNode.Light = light;
lightNode.Position = new SCNVector3 (-40, 40, 60);
scene.RootNode.AddChildNode (lightNode);
Çok yönlü aydınlatma, bir el fenerinin parlaması gibi eşit bir aydınlatmaya neden olan dağınık bir yansıma üretir. Ortam ışığı oluşturmak benzerdir, ancak her yönde eşit şekilde parlamasıyla yönü yoktur. Ruh hali aydınlatması gibi düşün :)
// ambient light
ambientLight = SCNLight.Create ();
ambientLightNode = SCNNode.Create ();
ambientLight.LightType = SCNLightType.Ambient;
ambientLight.Color = UIColor.Purple;
ambientLightNode.Light = ambientLight;
scene.RootNode.AddChildNode (ambientLightNode);
Işıklar yerle bir olduğunda küre artık sahnede görünür durumdadır.
Kamera ekleme
Görünüme kamera (SCN Kamera) eklemek, bakış açısını değiştirir. Kamerayı ekleme deseni benzerdir. Kamerayı oluşturun, bir düğüme ekleyin ve düğümü görünüme ekleyin.
// camera
camera = new SCNCamera {
XFov = 80,
YFov = 80
};
cameraNode = new SCNNode {
Camera = camera,
Position = new SCNVector3 (0, 0, 40)
};
scene.RootNode.AddChildNode (cameraNode);
Yukarıdaki koddan görebileceğiniz gibi, SceneKit nesneleri oluşturucular kullanılarak veya Create factory yönteminden oluşturulabilir. İlki C# başlatıcı söz diziminin kullanılmasına izin verir, ancak hangisinin kullanılacağı büyük ölçüde tercih konusudur.
Kamera yerinde olduğunda, kürenin tamamı kullanıcı tarafından görülebilir:
Ayrıca, görünüme başka ışıklar da ekleyebilirsiniz. İşte birkaç çok yönlü ışıkla nasıl göründüğü:
Buna ek olarak, ayarıyla sceneView.AllowsCameraControl = true
kullanıcı bir dokunma hareketiyle bakış açısını değiştirebilir.
Malzemeler
Malzemeler SCNMaterial sınıfıyla oluşturulur. Örneğin kürenin yüzeyine bir görüntü eklemek için görüntüyü malzemenin yayma içeriğine ayarlayın.
material = SCNMaterial.Create ();
material.Diffuse.Contents = UIImage.FromFile ("monkey.png");
sphere.Materials = new SCNMaterial[] { material };
Bu, aşağıda gösterildiği gibi görüntüyü düğüme katmanlar:
Bir malzeme, diğer aydınlatma türlerine de yanıt verecek şekilde ayarlanabilir. Örneğin, nesne parlak hale getirilebilir ve benekli içeriği, aşağıda gösterildiği gibi yüzeyde parlak bir noktayla sonuçlanacak şekilde, belirtik yansımayı gösterecek şekilde ayarlanabilir:
Malzemeler çok esnek olduğundan çok az kodla çok fazla şey başarmanızı sağlar. Örneğin, görüntüyü yayma içeriğine ayarlamak yerine yansıtıcı içerik olarak ayarlayın.
material.Reflective.Contents = UIImage.FromFile ("monkey.png");
Şimdi maymun, bakış açısından bağımsız olarak kürenin içinde görsel olarak oturuyor gibi görünüyor.
Animasyon
SceneKit, animasyonla iyi çalışacak şekilde tasarlanmıştır. Hem örtük hem de açık animasyonlar oluşturabilir ve hatta Çekirdek Animasyon katmanı ağacından bir sahne oluşturabilirsiniz. Örtük animasyon oluştururken, SceneKit kendi geçiş sınıfı SCNTransaction
olan sağlar.
Küreyi döndüren bir örnek aşağıda verilmiştir:
SCNTransaction.Begin ();
SCNTransaction.AnimationDuration = 2.0;
sphereNode.Rotation = new SCNVector4 (0, 1, 0, (float)Math.PI * 4);
SCNTransaction.Commit ();
Ancak döndürmeden çok daha fazlasına animasyon ekleyebilirsiniz. SceneKit'in birçok özelliği düşünülebilir. Örneğin, aşağıdaki kod malzemeye Shininess
animasyon uygulayarak belirtik yansımayı artırır.
SCNTransaction.Begin ();
SCNTransaction.AnimationDuration = 2.0;
material.Shininess = 0.1f;
SCNTransaction.Commit ();
SceneKit'in kullanımı çok basittir. Kısıtlamalar, fizik, bildirim temelli eylemler, 3B metin, alan derinliği desteği, Sprite Seti tümleştirmesi ve Çekirdek Görüntü tümleştirmesi gibi çok sayıda ek özellik sunar.