var rotY = 0;
var rotX = 0;
function setObjectQuaternion(quaternion, alpha, beta, gamma, orient) {
var zee = new THREE.Vector3(0, 0, 1);
var euler = new THREE.Euler();
var q0 = new THREE.Quaternion();
var q1 = new THREE.Quaternion(-Math.sqrt(0.5), 0, 0, Math.sqrt(0.5)); // - PI/2 around the x-axis
if (screenOrientation == 0) {
var vectorFingerY = new THREE.Vector3(1, 0, 0);
var fingerQY = new THREE.Quaternion();
fingerQY.setFromAxisAngle (vectorFingerY, -rotX);
}else if (screenOrientation == 180) {
var vectorFingerY = new THREE.Vector3(1, 0, 0);
var fingerQY = new THREE.Quaternion();
fingerQY.setFromAxisAngle (vectorFingerY, rotX);
}else if (screenOrientation == 90) {
var vectorFingerY = new THREE.Vector3(0, 1, 0);
var fingerQY = new THREE.Quaternion();
fingerQY.setFromAxisAngle (vectorFingerY, rotX);
}else if (screenOrientation == -90) {
var vectorFingerY = new THREE.Vector3(0, 1, 0);
var fingerQY = new THREE.Quaternion();
fingerQY.setFromAxisAngle (vectorFingerY, -rotX);
}
q1.multiply(fingerQY);
euler.set(beta, alpha, - gamma, 'YXZ'); // 'ZXY' for the device, but 'YXZ' for us
quaternion.setFromEuler(euler); // orient the device
quaternion.multiply(q1); // camera looks out the back of the device, not the top
quaternion.multiply(q0.setFromAxisAngle(zee, - orient)); // adjust for screen orientation
};
function update(camera) {
if (window.orientation !== undefined && window.orientation !== null) screenOrientation = window.orientation;
var alpha = deviceOrientation.alpha ? THREE.Math.degToRad(deviceOrientation.alpha) : 0; // Z
var beta = deviceOrientation.beta ? THREE.Math.degToRad(deviceOrientation.beta ) : 0; // X'
var gamma = deviceOrientation.gamma ? THREE.Math.degToRad(deviceOrientation.gamma) : 0; // Y''
var orient = screenOrientation ? THREE.Math.degToRad(screenOrientation ) : 0; // O
setObjectQuaternion(camera.quaternion, alpha, beta, gamma, orient);
};
あなたのinit container.appendChild(renderer.domElement)にこれを追加します。
renderer.domElement.addEventListener('touchstart', function (e) {
if (controls) {
e.preventDefault();
e.stopPropagation();
tempX = e.touches[ 0 ].pageX;
tempY = e.touches[ 0 ].pageY;
}
}, false);
renderer.domElement.addEventListener('touchmove', function (e) {
if (controls) {
e.preventDefault();
e.stopPropagation();
rotY += THREE.Math.degToRad((tempX - e.touches[ 0 ].pageX)/4);
rotX += THREE.Math.degToRad((tempY - e.touches[ 0 ].pageY)/4);
mesh.quaternion.copy(MeshStartQY);
var vectorFingerY = new THREE.Vector3(0, 1, 0);
var fingerQY = new THREE.Quaternion();
fingerQY.setFromAxisAngle (vectorFingerY, rotY);
mesh.quaternion.multiply(fingerQY);
tempX = e.touches[ 0 ].pageX;
tempY = e.touches[ 0 ].pageY;
}
}, false);
[r.76devブランチのバージョン](https://github.com/mrdoob/three.js/blob/dev/examples/js/controls/DeviceOrientationControls.js)は、柔軟性を持っているかどうかを確認あなたが必要です。 – WestLangley
ありがとう@WestLangley、それは助けた –