WebGL(Three.js)、WebVRともに初心者のものです。
以前このような質問をさせて頂きました。
3D空間内でWebサイトを表示する方法は?
https://teratail.com/questions/40572
こちらで頂いた回答を元に、
CSS3DRenderer.jsを使って、teratailを3D空間に表現するというのはできた(下記参照)のですが、
※ソースコード:https://github.com/afroscript/3Dteratail
※デモ:http://usaqwako.sakura.ne.jp/3Dteratail/
これを次はVR空間で表現したい(スマホVRで見れるようにしたいです)と考えています。
そこで、こちらの記事を参考に、いろいろと書き換えてみたのが下記なのですが、おそらくそもそもCSS3DRenderer.jsがVRに対応してないみたいで実現できず。。。
※ソースコード:https://github.com/afroscript/teraVR360
※デモ(真っ黒画面で何も表示されません。。。Consoleからエラーメッセージは確認できます):
→ http://usaqwako.sakura.ne.jp/teraVR360/
※Uncaught TypeError: cssRenderer.setPixelRatio is not a function
とのエラーメッセージが出てます
何か実現できる方法はあるのでしょうか??
あるいは今のCSS3DRenderer.jsを使った方法でも、何か改善すれば実現できるのでしょうか??
ヒント等でもけっこうです。
どなたかご教示いただけますと幸いでございます…!!
よろしくお願いいたします。
一応、現在書いているJavaScriptを掲載しておきます。(上記のGitHubにあるmain.jsと同じものです)
JavaScript
1/* 2 * WebGLRendererの生成 3 */ 4var renderer = new THREE.WebGLRenderer({antialias: true}); 5renderer.setSize(window.innerWidth, window.innerHeight); 6renderer.setPixelRatio(window.devicePixelRatio); 7//CanvasをDOMツリーに追加 8document.body.appendChild(renderer.domElement); 9 10 11/* 12 * CSS3DRendererの生成 13 */ 14var cssRenderer = new THREE.CSS3DRenderer(); 15cssRenderer.setSize(window.innerWidth, window.innerHeight); 16cssRenderer.domElement.style.position = 'absolute'; 17cssRenderer.domElement.style.top = 0; 18cssRenderer.domElement.style.margin = 0; 19cssRenderer.domElement.style.padding = 0; 20cssRenderer.setPixelRatio(window.devicePixelRatio); 21document.body.appendChild( cssRenderer.domElement ); 22 23 24/* 25 * シーンの追加 26 */ 27var scene = new THREE.Scene(); 28var cssScene = new THREE.Scene(); 29 30 31/* 32 * カメラの生成 33 */ 34var fov = 75; 35var aspect = window.innerWidth / window.innerHeight; 36var near = 0.1; 37var far = 10000; 38var camera = new THREE.PerspectiveCamera(fov, aspect, near, far); 39var camera_position_x0 = 0; 40var camera_position_y0 = 0; 41var camera_position_z0 = 0; 42camera.position.set(camera_position_x0,camera_position_y0,camera_position_z0); 43 44 45/* 46 * VR用コントローラを生成(OrbitControlsは一旦//で消してる) 47 */ 48var controls = new THREE.VRControls(camera); 49// var controls = new THREE.OrbitControls(camera, renderer.domElement); 50 51 52/* 53 * VREffectの生成(2分割画面を構築する) 54 */ 55var effect = new THREE.VREffect(renderer); 56effect.setSize(window.innerWidth, window.innerHeight); 57var cssEffect = new THREE.VREffect(cssRenderer); 58cssEffect.setSize(window.innerWidth, window.innerHeight); 59 60 61/* 62 *VRマネージャの生成 63 */ 64var manager = new WebVRManager(renderer, effect); 65var cssManager = new WebVRManager(cssRenderer, cssEffect); 66 67 68////////////////////////////////////////////////////// 69/* 70 *WebGLSceneにオブジェクトを追加していく 71 */ 72//Object(床をつくってみる) 73var pcWidth = 256; 74var pcHeight = 256; 75var floorGeo = new THREE.PlaneGeometry(pcWidth,pcHeight); 76var floorMesh = new THREE.MeshBasicMaterial({color:0xc0c0c0}); 77// var floorMesh = new THREE.MeshBasicMaterial({wireframe:true}); 78var floor = new THREE.Mesh( floorGeo, floorMesh ); 79var objePositionX = 0; 80var objePositionY = 0; 81var objePositionZ = -500; 82floor.position.set(objePositionX, objePositionY, objePositionZ); 83// floor.rotation.x = Math.PI/2; 84scene.add( floor ); 85 86 87/* 88 *cssSceneにオブジェクトを追加していく 89 */ 90var element = document.createElement('iframe'); 91element.src = 'https://teratail.com/'; 92element.style.width = pcWidth + 'px'; 93element.style.height = pcHeight + 'px'; 94// create the object3d for tjhis element 95var cssObject = new THREE.CSS3DObject( element ); 96// we reference the same position and rotation 97cssObject.position.set(objePositionX, objePositionY, objePositionZ); 98cssObject.rotation = floor.rotation; 99// add it to the css scene 100cssScene.add(cssObject); 101 102 103/* 104 * Lightをシーンに追加 105 */ 106var light = new THREE.DirectionalLight(0xffffff); 107light.position.set(0,30,-50); 108scene.add(light); 109cssScene.add(light); 110 111 112/* 113 *環境光を追加 114 */ 115var ambient = new THREE.AmbientLight(0x333333); 116scene.add(ambient); 117cssScene.add(ambient); 118 119 120/* 121 *補助軸の表示(最終的に消す) 122 */ 123// var axis = new THREE.AxisHelper(1000); 124// cssScene.add(axis); 125// scene.add(axis); 126 127 128 129/* 130 *アニメーションループ 131 */ 132var lastRender = 0; 133function animate(timestamp) { 134 // var delta = Math.min(timestamp - lastRender, 500); 135 lastRender = timestamp; 136 137 //VRコントローラのupdate 138 controls.update(); 139 140 //VRマネージャを通してシーンをレンダリング 141 manager.render(scene, camera, timestamp); 142 143 //アニメーションループ 144 requestAnimationFrame(animate); 145} 146 147// アニメーションの開始 148animate(performance ? performance.now() : Date.now());
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。