まったく同じ問題がありました。DOM なしで HUD (ヘッドアップ ディスプレイ) を作成しようとしていましたが、最終的にこのソリューションを作成しました。
- 正投影カメラで別のシーンを作成しました。
- canvas 要素を作成し、2D 描画プリミティブを使用してグラフィックをレンダリングしました。
- 次に、画面全体にフィットする平面を作成し、2D キャンバス要素をテクスチャとして使用しました。
- 元のシーンの上にその二次的なシーンをレンダリングしました
HUD コードは次のようになります。
// We will use 2D canvas element to render our HUD.
var hudCanvas = document.createElement('canvas');
// Again, set dimensions to fit the screen.
hudCanvas.width = width;
hudCanvas.height = height;
// Get 2D context and draw something supercool.
var hudBitmap = hudCanvas.getContext('2d');
hudBitmap.font = "Normal 40px Arial";
hudBitmap.textAlign = 'center';
hudBitmap.fillStyle = "rgba(245,245,245,0.75)";
hudBitmap.fillText('Initializing...', width / 2, height / 2);
// Create the camera and set the viewport to match the screen dimensions.
var cameraHUD = new THREE.OrthographicCamera(-width/2, width/2, height/2, -height/2, 0, 30 );
// Create also a custom scene for HUD.
sceneHUD = new THREE.Scene();
// Create texture from rendered graphics.
var hudTexture = new THREE.Texture(hudCanvas)
hudTexture.needsUpdate = true;
// Create HUD material.
var material = new THREE.MeshBasicMaterial( {map: hudTexture} );
material.transparent = true;
// Create plane to render the HUD. This plane fill the whole screen.
var planeGeometry = new THREE.PlaneGeometry( width, height );
var plane = new THREE.Mesh( planeGeometry, material );
sceneHUD.add( plane );
そして、それがレンダリング ループに追加したものです。
// Render HUD on top of the scene.
renderer.render(sceneHUD, cameraHUD);
ここで完全なソース コードを試すことができます:
http://codepen.io/jaamo/pen/MaOGZV
私のブログで実装の詳細を読んでください:
http://www.evermade.fi/pure-three-js-hud/