如何使用 threeJ 在 2D 中渲染字母表
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() 中,我向左/向右或向下移动块。当我这样做时,块位置将被更新,显然字母表应该相应地呈现。
我应该如何在这些块上渲染字母?
编辑:我正在使用WebGLRenderer。
您可以获取要在其上绘制文本的每个块(上面的"立方体"变量)的屏幕位置,并使用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 才能移动立方体。
另一种方法是使用所需的文本创建特定纹理,并将每个纹理作为材质应用于相应的立方体。
相关文章:
- 如何在javascript中通过rtl字母表对列表进行排序和分组
- 对于循环-在循环内部循环,用于获取带有ascii值的字母表
- 只允许数字出现在字母表后面
- 在JavaScript中增加字母表
- JQuery文本区域字母表
- 如何使正则表达式接受ONLY字母表和空格
- 字母表中的选择
- 仅当后面跟着字母表时才允许使用空格字符的验证
- 如何使用regex从字母表字符串中删除特定的字母
- 显示给定输入数字的数据集中字母表的所有可能组合
- 存储字母表中每个字母在所需位置的字符串中出现的次数
- 基于字母表的选择元素的动态选项组
- 将字母表中的所有字母实例替换为另一个
- 在 Jquery 中创建词汇表字母表
- 在CSS和/或Javascript中给定文本中俄语字母表的每个字符都有不同的颜色
- 我正在尝试遍历所有字母表的数组并将所有其他字母大写.任何解决方案
- 为字母表中的所有字母创建链接
- JavaScript 循环字母表与搜索词
- 选择单选按钮时更改字母表
- 如何使用 threeJ 在 2D 中渲染字母表