Skip to content

Instantly share code, notes, and snippets.

@makihiro
Last active March 9, 2020 06:05
Show Gist options
  • Save makihiro/d878e0fc6e1f3b2acc195dd6c306f80a to your computer and use it in GitHub Desktop.
Save makihiro/d878e0fc6e1f3b2acc195dd6c306f80a to your computer and use it in GitHub Desktop.
//L99-103
if (navigator.xr) {
navigator.xr.isSessionSupported('immersive-ar')
.then((supported) => {
// XRデバイスが有効でimmersive-arがサポートされていれば、XRボタンを有効にする処理
xrButton.enabled = supported;
});
//L107-113
function onRequestSession() {
return navigator.xr.requestSession('immersive-ar', {requiredFeatures: ['local', 'hit-test']})
.then((session) => {
// XRセッションを開始する処理
// requiredFeaturesでhit-testを要求
xrButton.setSession(session);
onSessionStarted(session); //onSessionStartedのコール
});
}
//L135-146,onSessionStarted内
session.requestReferenceSpace('viewer').then((refSpace) => {
xrViewerSpace = refSpace;
session.requestHitTestSource({ space: xrViewerSpace }).then((hitTestSource) => {
xrHitTestSource = hitTestSource; //hit testの要求
});
});
session.requestReferenceSpace('local').then((refSpace) => {
xrRefSpace = refSpace;
session.requestAnimationFrame(onXRFrame); //Render loop処理のコール
});
//L198-211,onXRFrame内
if (xrHitTestSource && pose) {
let hitTestResults = frame.getHitTestResults(xrHitTestSource);
if (hitTestResults.length > 0) {
//hit testを行い、hit testの結果が得られたら、バーチャルオブジェクト(reticle)を可視にセットする処理。表示位置はpose情報から取得
let pose = hitTestResults[0].getPose(xrRefSpace);
reticle.visible = true;
reticle.matrix = pose.transform.matrix;
}
}
scene.drawXRFrame(frame, pose); //フレームを描画
//L155-157
function onSessionEnded(event) {
xrButton.setSession(null);
}
function addARObjectAt(matrix) {
let newFlower = arObject.clone();
newFlower.visible = true;
newFlower.matrix = matrix;
scene.addNode(newFlower); //sceneに仮想オブジェクトnewFlowerを追加
flowers.push(newFlower);
if (flowers.length > MAX_FLOWERS) {
let oldFlower = flowers.shift();
scene.removeNode(oldFlower);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment