【问题标题】:how to render alphabets in 2D using threejs如何使用threejs在2D中渲染字母
【发布时间】:2016-04-28 15:56:24
【问题描述】:

我正在制作一个 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() 中,我将块向左/向右或向下移动。当我这样做时,块位置将被更新,并且显然应该相应地呈现字母表。

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

编辑:我正在使用 WebGLRenderer。

【问题讨论】:

    标签: javascript three.js rendering text-rendering


    【解决方案1】:

    您可以获取要在其上绘制文本的每个块(上面的“立方体”变量)的屏幕位置,并使用 HTML 在每个块上的该屏幕位置绘制文本。这里讨论了使用 HTML 制作这样的文本精灵:

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

    您可以像这样获取上面“立方体”的屏幕位置:

    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 以进行立方体移动。

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

    【讨论】:

    • 不确定这是否是一个相关问题,但我还是会问:HTML 方法是否也适用于 WebGLRenderer
    • 另外,渲染到纹理并应用它会不会更高效(因为这将通过 GPU 完成)?
    • @brainy dexter 使用 HTML
      将与 WebGLRenderer 一起使用。您可以将屏幕上的
      放置在渲染器正在绘制的 上。如果您只想应用几个字母,那么纹理可能更容易编码。如果您有很多动态变化的文本,那么 HTML 方法可能更容易编码。性能将取决于平台,但我个人认为以这种方式将 HTML 与 THREE 结合使用的性能消耗最小。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-11-29
    • 1970-01-01
    • 2014-07-09
    • 1970-01-01
    • 2015-08-24
    • 1970-01-01
    • 2017-05-01
    相关资源
    最近更新 更多