Android'de Artırılmış Gerçekliğe (AR) Başlarken
Artırılmış Gerçeklik, gerçek dünyadaki sanal unsurları üst üste bindirerek kullanıcının deneyimini geliştiren harmanlanmış bir ortam yaratan bir teknolojidir. AR'nin artan popülaritesi ile, giderek daha fazla geliştirici bu teknolojiyi uygulamalarına entegre etmenin yollarını arıyor. Bu gönderide, SceneView kullanarak temel AR'yi uygulayacağız.
1️⃣Gradle'ı Yapılandırın
ArSceneView(SceneView'ün parçası) bağımlılığını app/build.gradle. Bu bağımlılık, Filament ve ARCore'u içerir.
// 3D and ARCore
implementation 'io.github.sceneview:arsceneview:0.9.7'
defaultConfig {
...
minSdk 24 // minSdk to use sceneview is 24
...
}
SceneView tarafından desteklenen biçim .glbve .gltf. Eğer yoksa, burada kullandığımın aynısını alabilirsiniz .
Ardından, dizin assetsiçinde dizin oluşturun main. modelsİsteğe bağlı olarak, varlıkların içinde de dizin oluşturabilirsiniz . Ardından, modelinizi klasörünüzden sürükleyerek veya kopyalayıp yapıştırarak dizine aktarın.
3️⃣Düzen'e ArSceneView ekleyin
ArSceneViewDüzeninize ekleyin . Bu görünüm kamerayı gösterecek ve 3D modelinizi üzerine yerleştirecektir.
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<io.github.sceneview.ar.ArSceneView
android:id="@+id/arSceneView"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
ArModelNodeModelin nasıl yerleştirileceğini, konumunu ve çapasını tanımlamak için oluşturun .
için placementMode, var
PlacementMode.INSTANT: Hızlı yerleştirme
PlacementMode.DEPTH: Doğru yerleştirme
PlacementMode.PLANE_HORIZONTAL: Sadece yatay düzlemde/duvarlarda
PlacementMode.PLANE_VERTICAL: Yalnızca dikey düzlemde/duvarlarda
PlacementMode.PLANE_HORIZONTAL_AND_VERTICAL: Yalnızca hem yatay hem de dikey düzlemde/duvarlarda
PlacementMode.BEST_AVAILABLE: Otomatik rafine doğruluk yerleşimi
hitPositionbir AR konumu bulmak için vuruşun yapılacağı düğüm kamerası/ekran/görünüm konumudur.
followHitPositiondüğümün kamerayı/ekranı takip etmesini sağlayacak
instantAnchordüğümü ilk uygun yere demirleyecektir.
class MainActivity : AppCompatActivity() {
lateinit var arSceneView: ArSceneView
var modelNode : ArModelNode? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
arSceneView = findViewById(R.id.arSceneView)
modelNode = ArModelNode(
placementMode = PlacementMode.BEST_AVAILABLE,
hitPosition = Position(x = 0.0f, y = 0.0f, z = -2.0f),
followHitPosition = true,
instantAnchor = true
)
}
}
Model için .glb formatını kullandığımız için , kullanarak modeli ArModelNodeçağırarak varlıklarımızdan yüklüyoruz . loadModelGlbAsync()Veya bir Coroutine Scope içinde yüklemek isterseniz, arayabilirsiniz loadModel().
Ayrıca modelleri internetten link'e geçirerek yükleyebilirsiniz glbFileLocation.
scaleToUnityüklendiğinde modeli ölçeklendirmek için kullanılır.
centerOriginmodel içindeki merkez noktası orijin konumudur. Değerler, model boyutlarından yüzdelere karşılık gelen -1.0 ile 1.0 arasındadır.
class MainActivity : AppCompatActivity() {
lateinit var arSceneView: ArSceneView
var modelNode : ArModelNode? = null
override fun onCreate(savedInstanceState: Bundle?) {
...
modelNode = ArModelNode(...)
modelNode?.loadModelGlbAsync(
context = this@MainActivity,
glbFileLocation = "models/panda.glb",
autoAnimate = true,
scaleToUnits = 0.9f,
centerOrigin = Position(y = -1.0f),
onError = {exception ->
Toast.makeText(this, exception.message.toString(), Toast.LENGTH_SHORT).show()
},
onLoaded = {modelInstance ->
}
)
}
}
Yüklenen modeli görüntülemek için, model düğümünü geçirerek addChild()yöntemi çağırın.ArSceneView
class MainActivity : AppCompatActivity() {
lateinit var arSceneView: ArSceneView
var modelNode : ArModelNode? = null
override fun onCreate(savedInstanceState: Bundle?) {
...
modelNode = ArModelNode(
...
)
modelNode?.loadModelGlbAsync(
...
)
modelNode?.let {
arSceneView.addChild(it)
}
}
}
package com.rizqi.ar
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.Toast
import io.github.sceneview.ar.ArSceneView
import io.github.sceneview.ar.node.ArModelNode
import io.github.sceneview.ar.node.PlacementMode
import io.github.sceneview.math.Position
class MainActivity : AppCompatActivity() {
lateinit var arSceneView: ArSceneView
var modelNode : ArModelNode? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
arSceneView = findViewById(R.id.arSceneView)
modelNode = ArModelNode(
placementMode = PlacementMode.BEST_AVAILABLE,
hitPosition = Position(x = 0.0f, y = 0.0f, z = -2.0f),
followHitPosition = true,
instantAnchor = true
)
modelNode?.loadModelGlbAsync(
context = this@MainActivity,
glbFileLocation = "models/panda.glb",
autoAnimate = true,
scaleToUnits = 0.9f,
centerOrigin = Position(y = -1.0f),
onError = {exception ->
Toast.makeText(this, exception.message.toString(), Toast.LENGTH_SHORT).show()
},
onLoaded = {modelInstance ->
}
)
modelNode?.let {
arSceneView.addChild(it)
}
}
}
Yaşasın , Android Uygulamasında Artırılmış Gerçekliği (AR) nasıl uygulayacağımızı yeni öğreniyoruz. 3D modeli gerçek dünyada başarılı bir şekilde telefonumuz aracılığıyla gösteriyoruz. ArModelNodeÖzet için, konum konfigürasyonunu tanımlamak için oluşturmamız gerekiyor . Düğümü kullanarak modeli yüklüyoruz ve ArSceneView.
Buraya kadar takip ettiğiniz için teşekkürler. Android Geliştirme gönderileri hakkında daha fazla bilgi almak için beni takip edin . LinkedIn ve Instagram'da bağlanalım
Referans
Sahne Görünümü — Github
Sahne Görünümü | ARCore/ARKit ve Google Filament ile çalışan Android, iOS ve React Native (Android ve iOS) için 3B ve AR Görünümü

![Bağlantılı Liste Nedir? [Bölüm 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































