https://github.com/mrdoob/three.js/blob/master/examples/js/effects/OculusRiftEffect.jsの OculusRiftEffect を使用して OculusRift 用に開発しており、スプライトを使用しています。問題は、スプライトがスクリーンショットのように各目の正しい位置に表示されないことです。家のスプライトがそれぞれの目で異なる位置にあり、眼球に「複視」効果を引き起こしていることがわかります。コードをいじりながら(ここにデモプランカーがあります) 画面の端の近くではポジショニングがより正確であることがわかりますが、ポジショニングがオフになっている画面の中央に近づける必要があります。これは OculusRiftEffect のシェーディング/レンダリングと関係があると思いますが、分解するのに十分な知識がありません。どんな方向性でも感謝します!
サンプルコード:
var _scene, _camera, _renderer, _effect, _sprite;
function init() {
_scene = new THREE.Scene();
_camera = new THREE.PerspectiveCamera(70, window.innerWidth / window.innerHeight, .1, 100000);
_camera.lookAt(new THREE.Vector3());
_renderer = new THREE.WebGLRenderer({
antialias: true,
canvas: document.getElementById('legit')
});
_renderer.setSize(window.innerWidth, window.innerHeight);
_effect = new THREE.OculusRiftEffect(_renderer, {
worldScale: 1000
});
_effect.setSize(window.innerWidth, window.innerHeight);
THREE.ImageUtils.crossOrigin = 'anonymous';
_sprite = new THREE.Sprite(
new THREE.SpriteMaterial({
map: new THREE.Texture(document.getElementById('icon')),
color: 0xff0000
})
);
_sprite.scale.set(200, 200, 1);
_sprite.position.set(500, 800, 1);
_scene.add(_sprite);
_scene.add(new THREE.Mesh(
new THREE.SphereGeometry(3000, 64, 32),
new THREE.MeshBasicMaterial({
color: 0xffffff,
wireframe: true,
side: THREE.DoubleSide
})
));
animate();
}
function animate() {
requestAnimationFrame(animate);
render();
}
function render() {
_renderer.render(_scene, _camera);
_effect.render(_scene, _camera);
}
document.addEventListener('DOMContentLoaded', init);