getHitTestResultsForTransientInput() not in threejs how can i get it.
it mean hittest automatically providing rotation and scale object. then requestHitTestSource it only support in three js .and tried with Transform gesture also it show the error…
caught (in promise) TypeError: array[i].call is not a function
at TransformControls.dispatchEvent (three.module.js:280:16)
at TransformControls.set (TransformControls.js:88:13)
at TransformControls.attach (TransformControls.js:571:15)
at Group.<anonymous> (main.js:98:21)
at Group.dispatchEvent (three.module.js:280:16)
at WebXRController.dispatchEvent (three.module.js:23188:20)
at onSessionEvent (three.module.js:23523:16)
at XRSession$1.dispatchEvent (<anonymous>:45:23)
at XRSession$1.<computed>.dispatchInputSourceEvent (<anonymous>:1364:28)
at XRSession$1.<computed>.onSelectEnd (<anonymous>:1342:39)
Code:
const controller= renderer.xr.getController(0);
scene.add(controller);
orbit = new OrbitControls( camera, renderer.domElement );
orbit.update();
orbit.addEventListener( 'change', renderer );
control = new TransformControls( camera, renderer.domElement );
control.addEventListener( 'change', renderer );
control.addEventListener( 'dragging-changed', function ( event ) {
orbit.enabled = ! event.value;
} );
controller.addEventListener('select', async(event)=>{
console.log("event",event);
console.log("Select \n",reticle.matrixWorld);
console.log("Select \n",reticle.matrix);
gltf.scene.position.setFromMatrixPosition(reticle.matrix);
gltf.scene.scale.setFromMatrixScale(reticle.matrix);
scene.add(gltf.scene);
control.attach( gltf.scene );
scene.add( control );
control.setMode( 'scale' );
});clickScale.addEventListener('click', function(event) {
event.preventDefault();
// controller.
renderer.render(scene, camera);
console.log("scale");
control.setMode( 'scale' );
});
clickMove.addEventListener('click', function(event) {
event.preventDefault();
console.log("translate");
control.setMode( 'translate' );
});
clickRotate.addEventListener('click', function(event) {
event.preventDefault();
console.log("rotare");
control.setMode( 'rotate' );
})
renderer.xr.addEventListener("sessionstart", async()=>{
console.log("session start \n");
const session = renderer.xr.getSession();
const viewerReferenceSpace = await session.requestReferenceSpace("viewer");
const hitTestSource = await session.requestHitTestSource({space: viewerReferenceSpace});
renderer.setAnimationLoop((timestamp,frame)=>{
if (!frame) return;
const hitTestResults = frame.getHitTestResults(hitTestSource);
if (hitTestResults.length>0) {
const hit = hitTestResults[0];
const referenceSpace = renderer.xr.getReferenceSpace(); // ARButton requested 'local' reference space
const hitPose = hit.getPose(referenceSpace);
reticle.visible = true;
// reticle
reticle.matrix.fromArray(hitPose.transform.matrix);
} else {
reticle.visible = false;
}
// orbit.update();
renderer.render(scene, camera);
});
});