如何使用threejs渲染二维字母

how to render alphabets in 2D using threejs

我正在制作一个 2d 游戏,其中的方块正在掉落(俄罗斯方块风格)。我需要在这些块上渲染字母表。这就是我创建块的方式:

 var geometry = new THREE.BoxGeometry( this.BLOCK_WIDTH, this.BLOCK_WIDTH, 4 );
 var material = new THREE.MeshBasicMaterial( { color: 0x00ff00 } );

 this.blocks = [];

 for (var i = 0; i < rows * columns; i++) {
  cube = new THREE.Mesh( geometry, material );
  cube.visible = false;
  cube.letter = letterGenerator.getNextLetter();
  this.blocks[i] = cube;

  scene.add( this.blocks[i] );
 };

如您所见,所有的方块看起来都一模一样,只是它们关联的字母表不同。在我的 update() 中,我将块移动 left/right 或向下移动。当我这样做时,块位置将被更新,显然字母表应该相应地呈现。

我应该如何在这些块上渲染字母表?

编辑:我正在使用 WebGLRenderer。

您可以获得要在其上绘制文本的每个块(上面的 "cube" 变量)的屏幕位置,然后使用 HTML 在每个块的屏幕位置绘制文本。使用 HTML 制作这样的文本精灵在此处讨论:

https://github.com/mrdoob/three.js/issues/1321

您可以像这样获取上面 "cube" 的屏幕位置:

var container = document.getElementById("idcanvas");
var containerWidth = container.clientWidth;
var containerHeight = container.clientHeight;
var widthHalf = containerWidth / 2, heightHalf = containerHeight / 2;
var locvector = new THREE.Vector3();
locvector.setFromMatrixPosition(cube.matrixWorld);
locvector.project(your_camera); //returns center of mesh
var xpos = locvector.x = (locvector.x * widthHalf) + widthHalf; //convert to screen coordinates
var ypos = locvector.y = -(locvector.y * heightHalf) + heightHalf;

您必须更新 HTML 方块移动。

另一种方法是使用您想要的文本创建特定纹理,并将每个纹理作为 material 应用到适当的立方体。