Kotlin'de ARCore ve Sceneform ile Augmented Reality

En son güncellendiği tarih: 7 gün önce


AR Nedir


Augmented Reality yani Artırılmış gerçeklik. Son zamanlarda bir çok popüler sosyal medya uygulamasının kullanmış olduğu bir teknolojiyi. Çıkışı öncelere dayanan ama son zamanlarda iyice popüler hale gelen AR, gerçek dünya ile sanal dünyanın birleşmesini sağlayan bir çizgi görevi görüyor diyebiliriz. AR ile sanal bir nesnenin gerçek dünyada görüntülenmesini sağlamış oluyoruz.


Peki Nasıl AR Geliştirebiliriz


Tabiki hazır bir sdk'yı kullanarak. Bu teknolojiyi kullanmak için bir kaç çeşit SDK mevcut:

ARKit, ARCore, Vuforia bunların en başında gelenler.


Biz bu yazıda ARCore sdk'sının Android Studio'da nasıl kullanılacağını öğreneceğiz.


ARCore nedir, ne işe yarar?



ARCore Google‘ın üretmiş olduğu Artırılmış gerçeklik deneyimini gerçek Dünya‘da kullanıcıya sunmak için oluşturulmuş olan bir platformdur


ARCore zemin ve ortamı tanımakla birlikte hareket sensörü ve ışığın açık veya kapalı olduğunu algılama, hareket izleme işlevlerini gerçekleştirebilmektedir.

Biz bu yazıda Google’ın hazırlamış olduğu bu SDK’yı Android ortamına entegre ederek ve Android ortamından telefon ortamına aktarılması sonucu telefonumuzun kamerasını manuel olarak kullanarak dünya üzerindeki bir noktaya verileri aktaracağız.


ARCore nasıl çalışıyor?


ARCore öncelikle düz bir Zemin algılıyor. Masa, duvar, parke vs..

SDK içerisine eklenen nesneyi bu düz zeminlerden birine konumlandırıyor. Bu konum kamera açısındaki herhangi bir hareketten bağımsız olmak üzere çalışmaktadır. Kamera açılışındaki değişim nesne üzerinde herhangi bir etki yapmaz. Kameranın nesneye fiziksel yakınlaşması veya uzaklaşmasıyla nesnenin görünümü daha gerçekçi bir hal alır.


Telefon hareketleri algılandığından dijital nesnelerin yerleri aynı kalır.


AR, VR & MR arasındaki fark



VR (Virtual Reality/Sanal Gerçeklik) : Gerçek Dünya ile iletişimin tamamen kesilerek kullanıcıya 360 video deneyimi sağlamaktır.


AR (Augmented Reality/Artırılmış gerçeklik) : Gerçek Dünyadan kopmadan Sanal objelere gerçek dünya üzerinde erişmektir.


MR (Mixed Reality/Karma Gerçeklik) : Kullanıcıya bulunduğu ortam ile Sanal ortam arasında bir köprü görevi görerek iki kavramın birleşimesine olanak sağlar.


ARCore Android'in yanısıra Unity Unreal ve IOS platformlarında da kullanılmaya uyumlu bir sdk‘dır.


AR‘i kullanmak için benim cihazım uygun mu derseniz:

Tahmin ettiğinizden daha çok cihaz bu gömülü sistemi çalıştırmak için uygundur Linke tıklayarak hangi cihazların AR‘a uygun olduğunu görebilirsiniz


Cihazımız da AR için hazır olduğuna göre projemize başlayalım.


Entegrasyon


Öncelikle Java ile geliştirecek olanlar direkt olarak sdk'yı klonlayarak projeyi klonladıktan sonra alt dizin olan Hello AR dizini içerisinde geliştirme yapabilir.


git clone https://github.com/google-ar/arcore-android-sdk.git

Ben bu yazıda Kotlin ile Ar uygulamasının nasıl yapılacağını anlatacağım.


Yeni bir kotlin projesi açıyorum ve AR için gerekli araçları proje içerisine implement ediyorum. Module app'i açıp şunu implement edelim


implementation 'com.google.ar.sceneform.ux:sceneform-ux:1.17.0'

CompileOptions yapılandırması gerekiyor çünkü ARCore Java 8 özelliklerine dayalı çalışıyor. Bu nedenle Minimum API 26 kullanılması zorunlu kılınıyor.


compileOptions{

    sourceCompatibility JavaVersion.VERSION_1_8

    targetCompatibility JavaVersion.VERSION_1_8

}

Artırılmış gerçeklik teknolojisini kullanabilmek için Android Manifest‘e gidip Kamera izinleri alalım.


<uses-permission android:name="android.permission.CAMERA" />

    <uses-permission android:name="android.hardware.camera.ar" android:required="true" />

Hangi sayfada AR teknolojisini kullanacaksak Android Manifest içerisinde o sayfa için şunu ekliyorum.


<meta-data android:name="com.google.ar.core" android:value="required" />

Google'ın Sceneform tool'unu implement edelim.

Sceneform doğrudan Android Studio üzerinden 3D nesneleri OpenGL kullanmadan içeri aktarmamızı sağlayan bir eklentidir.






Bunun için Settings/Plugin/Browse repositories/Google sceneform tools








Şimdi projeme 3D bir model ekliyorum. Ben ücretsiz modellerin olduğu bir sayfadan bu modeli aldım.


Seçmiş olduğum resmi projemin içindeki drawable klasörüne ekliyorum ve sağ tıklayarak Import Sceneform Assets'i seçiyorum.






Raw klasörünü seçerek tamamlıyorum.











Bunu yapmamızın sebebi build gradle içerisinde benim 3D modelimle bir sceneform yaratmaktır. Bunu yaptıktan sonra build gradle içerisinde şöyle bir yapı oluşacağına dikkat edin.


sceneform.asset('sampledata/model/frog.fbx',
        'default',
        'sampledata/model/frog.sfa',
        'src/main/res/raw/frog')

Bu şekilde 3D modelimiz hazır olmuş oldu.






Şimdi kodlama kısmına geçebiliriz


Öncelikle xml'de Google'ın bize sunmuş olduğu Sceneform yapısını kullanıyoruz.



Burada dikkat etmeniz gereken şey fragment yapısı içinde kullandığımız android:name="com.google.ar.sceneform.ux.ArFragment"


Gelelim MainActivity'ye


Öncelikle xml sayfasında hangi fragment içerisine sceneform sahnemizi eklediysek onu tanımlamak için bir arFragment ve modelimizi oluşturmak için ise modelRenderable sınıfını kullanmak için iki değişken oluşturalım.


var arFragment: ArFragment? = null
var modelRenderable: ModelRenderable? = null

onCreate içerisine arFragment'ımızı tanımlayıp setUpArModel adında fonksiyon oluşturalım.


arFragment = supportFragmentManager.findFragmentById(R.id.ar_view) as ArFragment?
setUpArModel()

Bu fonksiyon ile modelimizi renderable edeceğiz.


setSource ile modelimizi yüklüyoruz.



Herhangi bir hata oluşması durumunda .exceptionally yapısını kullanabiliriz. Bunu kullanmak isteyenler için ise aşağıda belirttim



Daha sonra onCreate'e gelip setUpPlane() fonksiyonunu çağırıyoruz ve bu fonksiyonda sahnemizi kaydetmesi ve buna göre nesneyi yerleştirmesi için bir Tap oluşturuyoruz



Burada ki hitResult sanal bir yapıdır. Bu yapı, masanın veya zeminin üzerinde sanal objemizin görünmesine olanak sağlar. Şimdi modelimiz için küçük 1-2 dokunuş lazım, bunun için setUpPlane fonksiyonu içinde createModel adında bir fonksiyon çağırdım.



Node, ekranda işlenmesi gereken tüm bilgileri içeren nesnelere denir.

TransformableNode ile objemizi büyütüp küçültebilir, hareket ettirip döndürebiliriz.


Her şey işte bu kadar kolay. Gerçek dünyaya bu kadar kolay bir şekilde sanal objenizi ekleyebilirsiniz.


Projenizi çalıştırıp eklediğiniz nesneyi deneyimleyebilirsiniz.





Projeyi github linkinden indirebilirsiniz:

https://github.com/demirtasm/helloAr


#Kotlin #AugmentedReality #AR #AndroidAR #ARCore

Komünite

Platform

Mobiler.dev Anasayfa
  • Twitter
  • Instagram
  • development_düzenlendi_düzenlendi
  • Youtube
  • slack-icon-black_edited_edited_edited
  • Gri LinkedIn Simge
JetBrains Hakkında Detaylı Bilgi Alın

© 2020 by mobiler.dev

mobilerdevLogo.jpg
Yazarlık Başvurusu Hakkında Bilgi Alın, Başvuru Yapın.
Topluluk Yazarlarını Tanıyın