Miałem dokładnie ten sam problem. Próbowałem utworzyć HUD (wyświetlacz Head-up) bez DOM i ostatecznie stworzyłem to rozwiązanie:
- Stworzyłem oddzielną scenę z aparatem ortograficznym.
- Utworzono element canvas i użyłem prymitywów rysunku 2D do renderowania grafiki.
- Następnie utworzyłem płaszczyznę pasującą do całego ekranu i użyłem elementu canvas 2D jako tekstury.
- I renderowane tę scenę drugorzędną na wierzchu oryginalnego sceny
to jak kod HUD wygląda następująco:
// 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);
I to właśnie dodałem do mojego renderowania pętli:
// Render HUD on top of the scene.
renderer.render(sceneHUD, cameraHUD);
Można odtwarzać z pełnym kodem źródłowym tutaj: http://codepen.io/jaamo/pen/MaOGZV
I czytaj więcej o realizacji na moim blogu: http://www.evermade.fi/pure-three-js-hud/
Brandon Jones ma dobry demo elementów wykonanych z hud div: http://media.tojicode.com/webgl-samples/hud-test.html – Anton
Zobacz również ten wątek: https://github.com/mrdoob/three.js/issues/1959 – WestLangley
dzięki, to są naprawdę pomocne – Dev