1. Başlamadan önce
Bu codelab'de, AR web uygulaması geliştirmeyle ilgili bir örnek verilmektedir. Gerçek dünyada varmış gibi görünen 3D modelleri oluşturmak için JavaScript kullanır.
Artırılmış gerçeklik (AR) ve sanal gerçeklik (VR) işlevini birleştiren WebXR Device API'yi kullanmalısınız. Etkileşimli web'de çalışan basit bir AR uygulaması oluşturmak için WebXR Device API'nin AR uzantılarına odaklanıyorsunuz.
Artırılmış gerçeklik (AR) nedir?
AR, genellikle bilgisayar tarafından oluşturulan grafiklerin gerçek dünyayla karıştırılmasını tanımlamak için kullanılan bir terimdir. Telefon tabanlı AR'de bu, bilgisayar grafiklerini canlı kamera feed'ine ikna edici şekilde yerleştirmek anlamına gelir. Telefon dünyayı gezerken bu efektin gerçekçi olması için, AR özellikli cihazın hareket ettiği dünyayı anlaması ve 3D uzayda konumunu (konumu ve yönünü) belirlemesi gerekir. Bu işlemler arasında yüzeylerin algılanması ve ortam aydınlatmasının tahmin edilmesi de yer alabilir.
İster selfie filtreleri ister AR tabanlı oyunlar için olsun, Google'ın ARCore ve Apple ARKit'in piyasaya sürülmesinden sonra artırılmış gerçeklik (AR) uygulamalarda yaygın olarak kullanıldı.
Neler oluşturacaksınız?
Bu codelab'de, artırılmış gerçekliği kullanarak bir modeli gerçek dünyaya yerleştiren bir web uygulaması geliştireceksiniz. Uygulamanız şunları yapabilecek:
- Dünyadaki konumunu ve yönünü belirleyip takip etmek için hedef cihazın sensörlerini kullanın
- Canlı kamera görüntüsünün üzerine birleştirilmiş bir 3D model oluşturun
- Gerçek dünyada keşfedilen yüzeylerin üzerine darbeler yerleştirmek için vuruş testleri yapın
Neler öğreneceksiniz?
- WebXR Device API'yi kullanma
- Temel AR sahnesini yapılandırma
- AR isabet testlerini kullanarak bir yüzey nasıl bulunur?
- Gerçek kamera feed'iyle senkronize edilmiş bir 3D model nasıl yüklenir ve oluşturulur?
- 3D modele dayalı olarak gölge oluşturma
Bu codelab, AR API'lerine odaklanmaktadır. Alakalı olmayan kavramlar ve kod blokları, ilgili kod deposunun koduna yerleştirilmiş olarak sizin için sunulur.
Gerekenler
- Statik web içeriği kodlama ve barındırmaya yönelik bir iş istasyonu
- Android 8.0 Oreo çalıştıran ARCore özellikli Android cihaz
- Google Chrome
- AR için Google Play Hizmetleri'nin yüklü olması (Chrome, uyumlu cihazlara otomatik olarak yüklemenizi ister)
- Tercih ettiğiniz bir web sunucusu
- AR cihazınızı iş istasyonunuza bağlamak için USB kablosu
- Örnek kod
- Metin düzenleyici
- Temel HTML, CSS, JavaScript ve Google Chrome Geliştirici Araçları hakkında bilgi
Bu codelab'in ilk adımını denemek için AR cihazınızda Dene'yi tıklayın. "Tarayıcınızda AR özellikleri yok" mesajının bulunduğu bir sayfa alırsanız Android cihazınızda AR için Google Play Hizmetleri'nin yüklü olduğundan emin olun.
2. Geliştirme ortamınızı ayarlama
Kodu indirme
- Bu codelab'in tüm kodlarını iş istasyonunuzda indirmek için aşağıdaki bağlantıyı tıklayın:
- İndirilen zip dosyasının paketini açın. Bu işlem, bu codelab'in çeşitli adımlarının dizinlerini ve ihtiyacınız olan tüm kaynakları içeren bir kök klasörü (
ar-with-webxr-master
) açar.
step-03
ve step-04
klasörleri, bu codelab'in üçüncü ve dördüncü adımlarının istenen bitiş durumunun yanı sıra final
sonucunu içerir. Bu platformlar referans için vardır.
Tüm kodlama işlemlerinizi work
dizininde yaparsınız.
Web sunucusunu yükle
- Kendi web sunucunuzu kullanmakta serbestsiniz. Henüz ayarlamadıysanız bu bölümde, Chrome için Web Sunucusu'nun nasıl kurulacağı açıklanmaktadır.
Bu uygulama henüz iş istasyonunuzda yüklü değilse Chrome Web Mağazası'ndan yükleyebilirsiniz.
- Chrome için Web Sunucusu uygulamasını yükledikten sonra
chrome://apps
bölümüne gidin ve Web Sunucusu simgesini tıklayın:
Ardından, yerel web sunucunuzu yapılandırmanıza olanak tanıyan aşağıdaki iletişim kutusunu görürsünüz:
- Klasör seç'i tıklayın ve
ar-with-webxr-master
klasörünü seçin. Bu, devam eden çalışmanızı web sunucusu iletişim kutusunda (Web Sunucusu URL'leri bölümünde) vurgulanan URL üzerinden sunmanızı sağlar. - Seçenekler (yeniden başlatma gerekir) altında, index.html'yi otomatik olarak göster onay kutusunu seçin.
- Web sunucusu seçeneğini Durdur, ardından Başlatıldı olarak değiştirin.
- En az bir Web Sunucusu URL'sinin göründüğünü doğrulayın: http://127.0.0.1:8887(varsayılan yerel ana makine URL'si).
Bağlantı noktası yönlendirmeyi kur
AR cihazınızı, localhost:8887'yi ziyaret ettiğinizde iş istasyonunuzdaki aynı bağlantı noktasına erişecek şekilde yapılandırın.
- Geliştirme iş istasyonunuzda chrome://inspect adresine gidin ve Bağlantı noktası yönlendirme... seçeneğini tıklayın:
- 8887 numaralı bağlantı noktasını localhost:8887'ye yönlendirmek için Bağlantı noktası yönlendirme ayarları iletişim kutusunu kullanın.
- Bağlantı noktası yönlendirmeyi etkinleştir onay kutusunu seçin:
Kurulumu doğrulama
Bağlantınızı test edin:
- Artırılmış gerçeklik (AR) cihazınızı bir USB kablosuyla iş istasyonunuza bağlayın.
- Chrome'daki AR cihazınızda adres çubuğuna http://localhost:8887 yazın. AR cihazınız bu isteği geliştirme iş istasyonunuzun web sunucusuna yönlendirmelidir. Bir dosya dizini görürsünüz.
- AR cihazınızda,
step-03/index.html
dosyasını tarayıcınıza yüklemek içinstep-03
simgesini tıklayın.
Artırılmış gerçekliği başlat düğmesi içeren bir sayfa göreceksiniz. | Ancak Desteklenmeyen tarayıcı hata sayfası görüyorsanız cihazınız muhtemelen uyumlu değildir. |
Web sunucunuzla olan bağlantının artık AR cihazınızla çalışması gerekir.
- Artırılmış gerçekliği başlat'ı tıklayın. ARCore'u yüklemeniz istenebilir.
Bir AR uygulamasını ilk kez çalıştırdığınızda bir kamera izinleri istemi görürsünüz.
→
Her şey hazır olduğunda, kamera feed'inin üzerine yerleştirilmiş küplerden oluşan bir sahne göreceksiniz. Kamera, dünyanın daha büyük bir kısmını ayrıştırdıkça sahneyi daha iyi anlamaya yardımcı olur. Dolayısıyla, etrafta dolaşmak nesnelerin sabitlenmesine yardımcı olabilir.
3. WebXR'yi yapılandır
Bu adımda, bir WebXR oturumunun ve temel bir AR sahnesinin nasıl ayarlanacağını öğreneceksiniz. HTML sayfası, temel AR işlevini etkinleştirmek için CSS stili ve JavaScript ile sağlanır. Bu, kurulum sürecini hızlandırarak codelab'in AR özelliklerine odaklanmasını sağlar.
HTML sayfası
Mevcut web teknolojilerini kullanarak bir AR deneyimini geleneksel bir web sayfasına dönüştürüyorsunuz. Bu deneyimde, tam ekran oluşturma tuvali kullanırsınız. Böylece HTML dosyasının çok fazla karmaşıklığı gerekmez.
AR özelliklerinin başlatılması için kullanıcı hareketi gerekir. Bu nedenle, AR'yi Başlat düğmesini ve desteklenmeyen tarayıcı mesajını görüntülemek için bazı Materyal Tasarım bileşenleri bulunmaktadır.
work
dizininizde bulunan index.html
dosyası aşağıdaki gibi görünür. Bu, gerçek içeriğin bir alt kümesidir; bu kodu dosyanıza kopyalamayın!
<!-- Don't copy this code into your file! -->
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Building an augmented reality application with the WebXR Device API</title>
<link rel="stylesheet" href="https://unpkg.com/material-components-web@latest/dist/material-components-web.min.css">
<script src="https://unpkg.com/material-components-web@latest/dist/material-components-web.min.js"></script>
<!-- three.js -->
<script src="https://unpkg.com/three@0.123.0/build/three.js"></script>
<script src="https://unpkg.com/three@0.123.0/examples/js/loaders/GLTFLoader.js"></script>
<script src="../shared/utils.js"></script>
<script src="app.js"></script>
</head>
<body>
<!-- Information about AR removed for brevity. -->
<!-- Starting an immersive WebXR session requires user interaction. Start the WebXR experience with a simple button. -->
<a onclick="activateXR()" class="mdc-button mdc-button--raised mdc-button--accent">
Start augmented reality
</a>
</body>
</html>
Anahtar JavaScript kodunu açın
Uygulamanızın başlangıç noktası app.js
. Bu dosya, artırılmış gerçeklik (AR) deneyimi oluşturmaya yönelik bazı temel bilgiler sağlar.
İş dizininizde uygulama kodu da (app.js
) zaten mevcut.
WebXR ve AR desteğini kontrol edin
Kullanıcının AR ile çalışabilmesi için navigator.xr
ve gerekli XR özelliklerinin mevcut olup olmadığını kontrol edin. navigator.xr
nesnesi, WebXR Device API'nin giriş noktasıdır. Dolayısıyla, cihaz uyumluysa bu nesne bulunmalıdır. Ayrıca "immersive-ar"
oturum modunun desteklendiğinden emin olun.
Her şey yolundaysa Artırılmış gerçeklik gir düğmesini tıkladığınızda bir XR oturumu oluşturulmaya çalışılır. Aksi takdirde, onNoXRDevice()
çağrılır (shared/utils.js
içinde) ve AR desteğinin olmadığı bir mesaj görüntülenir.
Bu kod app.js
dilinde zaten mevcut olduğundan herhangi bir değişiklik yapılması gerekmiyor.
(async function() {
if (navigator.xr && await navigator.xr.isSessionSupported("immersive-ar")) {
document.getElementById("enter-ar").addEventListener("click", activateXR)
} else {
onNoXRDevice();
}
})();
XRSession
isteyin
Artırılmış Gerçeklik Girin'i tıkladığınızda kod activateXR()
yöntemini çağırır. Bu, artırılmış gerçeklik deneyimini başlatır.
app.js
içindeactivateXR()
işlevini bulun. Bazı kodlar dışarıda bırakıldı:
activateXR = async () => {
// Initialize a WebXR session using "immersive-ar".
this.xrSession = /* TODO */;
// Omitted for brevity
}
WebXR'ye giriş noktası XRSystem.requestSession()
üzerindendir. Oluşturulan içeriğin gerçek dünya ortamında görüntülenmesini sağlamak için immersive-ar
modunu kullanın.
"immersive-ar"
modunu kullanarakthis.xrSession
uygulamasını başlatın:
activateXR = async () => {
// Initialize a WebXR session using "immersive-ar".
this.xrSession = await navigator.xr.requestSession("immersive-ar");
// ...
}
XRReferenceSpace
başlat
XRReferenceSpace
, sanal dünyada nesneler için kullanılan koordinat sistemini açıklar. 'local'
modu, izleyiciye yakın bir başlangıç noktası olan ve kararlı takibi olan bir referans alanı olan artırılmış gerçeklik (AR) deneyimi için en uygun seçenektir.
onSessionStarted()
uygulamasında this.localReferenceSpace
öğesini aşağıdaki kodla başlatın:
this.localReferenceSpace = await this.xrSession.requestReferenceSpace("local");
Animasyon döngüsü tanımlama
window.requestAnimationFrame
gibi bir oluşturma döngüsü başlatmak içinXRSession
requestAnimationFrame
kullanın.
onXRFrame
, her karede bir zaman damgası ve XRFrame ile çağrılır.
onXRFrame
uygulamasını tamamlayın. Bir kare çizildiğinde, aşağıdakileri ekleyerek bir sonraki isteği sıraya ekleyin:
// Queue up the next draw request.
this.xrSession.requestAnimationFrame(this.onXRFrame);
- Grafik ortamını ayarlamak için kod ekleyin.
onXRFrame
öğesinin altına ekleyin:
// Bind the graphics framebuffer to the baseLayer's framebuffer.
const framebuffer = this.xrSession.renderState.baseLayer.framebuffer;
this.gl.bindFramebuffer(this.gl.FRAMEBUFFER, framebuffer);
this.renderer.setFramebuffer(framebuffer);
- İzleyicinin duruşunu belirlemek için
XRFrame.getViewerPose()
hareketini kullanın. BuXRViewerPose
, cihazın uzaydaki konumunu ve yönünü açıklar. Ayrıca, geçerli cihazda düzgün bir şekilde gösterilebilmesi için sahnenin oluşturulması gereken her bir bakış açısını açıklayanXRView
dizisi de içerir. Stereskopik VR iki görünüm (her göz için bir tane) olsa da, artırılmış gerçeklik (AR) cihazlarında yalnızca bir görünüm vardır.
pose.views
içindeki bilgiler, çoğunlukla sanal kameranın görüntüleme matrisini ve projeksiyon matrisini yapılandırmak için kullanılır. Bu ayar, sahnenin 3D olarak nasıl düzenleneceğini etkiler. Kamera yapılandırıldığında sahne oluşturulabilir. onXRFrame
öğesinin altına ekleyin:
// Retrieve the pose of the device.
// XRFrame.getViewerPose can return null while the session attempts to establish tracking.
const pose = frame.getViewerPose(this.localReferenceSpace);
if (pose) {
// In mobile AR, we only have one view.
const view = pose.views[0];
const viewport = this.xrSession.renderState.baseLayer.getViewport(view);
this.renderer.setSize(viewport.width, viewport.height);
// Use the view's transform matrix and projection matrix to configure the THREE.camera.
this.camera.matrix.fromArray(view.transform.matrix);
this.camera.projectionMatrix.fromArray(view.projectionMatrix);
this.camera.updateMatrixWorld(true);
// Render the scene with THREE.WebGLRenderer.
this.renderer.render(this.scene, this.camera);
}
Test et
Uygulamayı çalıştırın; için work/index.html
adresini ziyaret edin. Kamera feed'inizi, cihazınızı hareket ettirdikçe perspektifi değişen küplerin uzayda uçtuğunu görürsünüz. Ne kadar çok hareket ederseniz takip özelliği geliştirilir. Bu nedenle size ve cihazınıza uygun yöntemleri keşfedin.
Uygulamayı çalıştırmayla ilgili sorun yaşıyorsanız Giriş ve Geliştirme ortamınızı ayarlama bölümlerini kontrol edin.
4. Hedefleme retikli ekle
Temel AR sahnesi kurulumunun ardından, bir vuruş testi yaparak gerçek dünyayla etkileşim kurmanın zamanı geldi. Bu bölümde bir isabet testi programlayacak ve bu testi gerçek dünyada bir yüzey bulmak için kullanacaksınız.
İsabet testini anlama
İsabet testi genellikle uzaydaki bir noktadan belirli bir yöne doğru düz bir çizgi çizmenin ve bu çizginin ilgili nesnelerle kesişip kesişmediğini belirlemenin bir yoludur. Bu örnekte, cihazı gerçek dünyadaki bir konuma hedeflersiniz. Cihazınızın kamerasından ışınlanan bir ışınnın doğrudan önündeki fiziksel dünyaya girdiğini hayal edin.
WebXR Device API, bu ışının gerçek dünyadaki herhangi bir nesneyle kesişip kesişmediğini size bildirir. AR özellikleri ve dünyayı algılama özellikleri buna göre belirlenir.
Ek özelliklere sahip bir XRSession
isteyin
İsabet testleri yapmak için XRSession
istenirken ek özellikler gerekir.
app.js
uygulamasındanavigator.xr.requestSession
yerini bulun."hit-test"
ve"dom-overlay"
özelliklerini aşağıdaki gibirequiredFeature
olarak ekleyin:
this.xrSession = await navigator.xr.requestSession("immersive-ar", {
requiredFeatures: ["hit-test", "dom-overlay"]
});
- DOM yer paylaşımını yapılandırın.
document.body
öğesini, AR kamera görünümünün üzerine şu şekilde yerleştirin:
this.xrSession = await navigator.xr.requestSession("immersive-ar", {
requiredFeatures: ["hit-test", "dom-overlay"],
domOverlay: { root: document.body }
});
Hareket istemi ekleyin
ARCore, ortamla ilgili yeterli bilgi bir araya getirildiğinde en iyi performansı gösterir. Bu, eşzamanlı yerelleştirme ve haritalama (SLAM) adı verilen bir süreçle gerçekleştirilir. Bu işlemde, konum ve çevre özelliklerindeki bir değişikliği hesaplamak için görsel olarak farklı özellik noktaları kullanılır.
Kamera akışının üstünde bir hareket istemi görüntülemek için önceki adımda belirlediğiniz "dom-overlay"
öğesini kullanın.
index.html
için stabilization
kimlikli bir <div>
ekleyin. Bu <div>
, sabitleme durumunu temsil eden bir animasyon gösterir ve kullanıcıları cihazlarını kullanarak SLAM sürecini iyileştirmek için gezinmeye yönlendirir. Bu mesaj, kullanıcı AR'deyken gösterilir ve retikül <body>
sınıfları tarafından kontrol edilen bir yüzey bulduğunda gizlenir.
<div id="stabilization"></div>
</body>
</html>
Retikül ekle
Cihaz görünümünün gösterildiği konumu belirtmek için bir retikül kullanın.
app.js
öğesinde,setupThreeJs()
içindekiDemoUtils.createCubeScene()
çağrısını boş birThree.Scene()
ile değiştirin.
setupThreeJs() {
// ...
// this.scene = DemoUtils.createCubeScene();
this.scene = DemoUtils.createLitScene();
}
- Yeni sahneyi, çarpışma noktasını temsil eden bir nesneyle doldurun. Sağlanan
Reticle
sınıfı,shared/utils.js
için retikül modelini yüklemeyi yönetir. Reticle
özelliğinisetupThreeJs()
uygulamasında sahneye ekleyin:
setupThreeJs() {
// ...
// this.scene = DemoUtils.createCubeScene();
this.scene = DemoUtils.createLitScene();
this.reticle = new Reticle();
this.scene.add(this.reticle);
}
İsabet testi yapmak için yeni bir XRReferenceSpace
kullanmanız gerekir. Bu referans alanı, görüntüleme yönüyle hizalı bir ışın oluşturmak için izleyicinin bakış açısından yeni bir koordinat sistemini gösterir. Bu koordinat sistemi, isabet testlerini hesaplayabilen XRSession.requestHitTestSource()
ürününde kullanılır.
- Aşağıdakileri
app.js
konumundakionSessionStarted()
öğesine ekleyin:
async onSessionStarted() {
// ...
// Setup an XRReferenceSpace using the "local" coordinate system.
this.localReferenceSpace = await this.xrSession.requestReferenceSpace("local");
// Add these lines:
// Create another XRReferenceSpace that has the viewer as the origin.
this.viewerSpace = await this.xrSession.requestReferenceSpace("viewer");
// Perform hit testing using the viewer as origin.
this.hitTestSource = await this.xrSession.requestHitTestSource({ space: this.viewerSpace });
// ...
}
- Bu
hitTestSource
öğesini kullanarak her karede bir isabet testi yapın:- İsabet testi için sonuç alınamıyorsa ARCore, ortamı anlamak için yeterli zamana sahip olmamıştır. Bu durumda, sabitlemeyi
<div>
kullanarak kullanıcıdan cihazı hareket ettirmesini isteyin. - Sonuç varsa retikülü ilgili konuma taşıyın.
- İsabet testi için sonuç alınamıyorsa ARCore, ortamı anlamak için yeterli zamana sahip olmamıştır. Bu durumda, sabitlemeyi
- Retikülü taşımak için
onXRFrame
dosyasını değiştirin:
onXRFrame = (time, frame) => {
// ... some code omitted ...
this.camera.updateMatrixWorld(true);
// Add the following:
const hitTestResults = frame.getHitTestResults(this.hitTestSource);
if (!this.stabilized && hitTestResults.length > 0) {
this.stabilized = true;
document.body.classList.add("stabilized");
}
if (hitTestResults.length > 0) {
const hitPose = hitTestResults[0].getPose(this.localReferenceSpace);
// update the reticle position
this.reticle.visible = true;
this.reticle.position.set(hitPose.transform.position.x, hitPose.transform.position.y, hitPose.transform.position.z)
this.reticle.updateMatrixWorld(true);
}
// More code omitted.
}
Ekrana dokunma davranışını ekleyin
XRSession
, birincil işlemi temsil eden select
etkinliği üzerinden kullanıcı etkileşimine dayalı olarak etkinlik yayınlayabilir. Mobil cihazlardaki WebXR'de birincil işlem, ekrana dokunmadır.
onSessionStarted
öğesinin altına birselect
etkinlik işleyici ekleyin:
this.xrSession.addEventListener("select", this.onSelect);
Bu örnekte, ekrana dokunulduğunda retikele ayçiçeği yerleştirilmiş.
App
sınıfındaonSelect
için bir uygulama oluşturun:
onSelect = () => {
if (window.sunflower) {
const clone = window.sunflower.clone();
clone.position.copy(this.reticle.position);
this.scene.add(clone);
}
}
Uygulamayı test etme
İsabet testlerini kullanarak cihazınızı kullanarak hedefleyebileceğiniz bir retikül oluşturdunuz. Ekrana dokunduğunuzda, retikülün belirttiği yere ayçiçeği yerleştirebileceksiniz.
- Uygulamanızı çalıştırırken zeminin yüzeyini izleyen bir retikül görebilirsiniz. Yoksa telefonunuzla yavaşça etrafa bakmayı deneyin.
- Retikülü gördükten sonra dokunun. Üzerine ayçiçeği yerleştirilmelidir. Alttaki AR platformunun gerçek dünyadaki yüzeyleri daha iyi algılayabilmesi için biraz hareket etmeniz gerekebilir. Düşük ışık ve özellik içermeyen yüzeyler, sahneyi anlama kalitesini düşürür ve isabet bulunamama olasılığını artırır. Herhangi bir sorunla karşılaşırsanız bu adımın çalışan bir örneğini görmek için
step-04/app.js
koduna göz atın.
5. Gölge ekle
Gerçekçi bir sahne oluşturmak, sahneye gerçekçilik ve sürükleyicilik katan dijital nesnelerde uygun ışıklandırma ve gölgeler gibi öğeleri içerir.
Işık ve gölgeler three.js
tarafından işlenir. Hangi ışıkların gölge oluşturacağını, hangi malzemelerin bu gölgeleri alıp alacağını ve hangi ağların gölge oluşturabileceğini belirtebilirsiniz. Bu uygulamanın sahnesinde, gölge oluşturan bir ışık ve yalnızca gölgeleri oluşturmak için düz bir yüzey bulunuyor.
three.js
WebGLRenderer
alanında gölgeleri etkinleştirin. Oluşturucuyu oluşturduktan sonrashadowMap
öğesinde aşağıdaki değerleri ayarlayın:
setupThreeJs() {
...
this.renderer = new THREE.WebGLRenderer(...);
...
this.renderer.shadowMap.enabled = true;
this.renderer.shadowMap.type = THREE.PCFSoftShadowMap;
...
}
DemoUtils.createLitScene()
kullanılarak oluşturulan örnek sahne, yalnızca gölge oluşturan düz ve yatay bir yüzey olan shadowMesh
adlı bir nesne içeriyor. Bu yüzeyin başlangıçta Y konumu 10.000 birimdir. Ayçiçeği yerleştirildiğinde, shadowMesh
boyutunu gerçek dünyadaki yüzeyle aynı yüksekliğe getirin, böylece çiçeğin gölgesi gerçek dünya zemininin tepesinde oluşturulur.
onSelect
ürününde, sahneyeclone
ekledikten sonra gölge düzlemini yeniden konumlandırmak için kod ekleyin:
onSelect = () => {
if (window.sunflower) {
const clone = window.sunflower.clone();
clone.position.copy(this.reticle.position);
this.scene.add(clone);
const shadowMesh = this.scene.children.find(c => c.name === "shadowMesh");
shadowMesh.position.y = clone.position.y;
}
}
Test et
Ayçiçeğinizi yerleştirirken gölge oluşturduğunu görmeniz gerekir. Herhangi bir sorunla karşılaşırsanız bu adımın çalışan bir örneğini görmek için final/app.js
koduna göz atın.
6. Ek kaynaklar
Tebrikler! WebXR kullanarak AR ile ilgili bu codelab'in sonuna geldiniz.