Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Three.js 在三维对象上方附加文本_Three.js_Label_Game Engine - Fatal编程技术网

Three.js 在三维对象上方附加文本

Three.js 在三维对象上方附加文本,three.js,label,game-engine,Three.js,Label,Game Engine,我想知道是否可以在3D对象上方附加文本? 如果是,我会怎么做 到目前为止,我正在执行以下操作来加载网格及其材质,最后将其添加到一个3.Object3D();并将其添加到场景中。很好,没有任何问题。 下一步是,我想在它的上方显示一个漂亮的文本,这个对象总是固定的,从各个角度都可以看到 loader.load('assets/' + enemyUrl, function (geometry, materials) { material = new THREE.MeshFaceMaterial(

我想知道是否可以在3D对象上方附加文本? 如果是,我会怎么做

到目前为止,我正在执行以下操作来加载网格及其材质,最后将其添加到一个3.Object3D();并将其添加到场景中。很好,没有任何问题。 下一步是,我想在它的上方显示一个漂亮的文本,这个对象总是固定的,从各个角度都可以看到

loader.load('assets/' + enemyUrl, function (geometry, materials) {

  material = new THREE.MeshFaceMaterial( materials );
  model = new THREE.SkinnedMesh( geometry, material );

  var mats = model.material.materials;

  for (var i = 0,length = mats.length; i < length; i++) {
    var m = mats[i];
    m.skinning = true;
  }

  ensureLoop(geometry.animations[0]);

  function ensureLoop( tmp ) {
    for ( var i = 0; i < tmp.hierarchy.length; i ++ ) {
      var bone = tmp.hierarchy[ i ];

      var first = bone.keys[ 0 ];
      var last = bone.keys[ bone.keys.length - 1 ];

      last.pos = first.pos;
      last.rot = first.rot;
      last.scl = first.scl;
    }
  }

  model.scale.set(2.5,2.5,2.5);

  // TODO: Randomize where to put it in the world
  yawObject.position.y = spawnPosition.y;
  yawObject.position.x = spawnPosition.x;
  yawObject.position.z = spawnPosition.z;

  yawObject.add(model);
  scene.add(yawObject);
});
loader.load('assets/')+enemyUrl,函数(几何体、材质){
材料=新的三个网格面材料(材料);
模型=新的三个。蒙皮网格(几何体、材质);
var mats=模型。材料。材料;
对于(变量i=0,长度=mats.length;i
大概是这样的:

这就是我的游戏现在的样子:


确保这是可能的。你可以创建一个画布,上面有文字,你可以在一个平面上使用它作为纹理,这个平面总是看着相机,你也可以用一个粒子来做,但是我不太确定它是如何工作的,因为粒子材质有一个大小参数。比如:

var name = 'Rovdjuret';
var canvas = document.createElement('canvas');
var ctx = canvas.getContext("2d");
    ctx.font="20px Georgia";
    ctx.fillText(name,10,50);

var texture = new THREE.Texture(canvas);
    texture.needsUpdate = true; //just to make sure it's all up to date.

var label = new THREE.Mesh(new THREE.PlaneGeometry, new THREE.MeshBasicMaterial({map:texture}));
在渲染/动画循环中,可以使所有标签看起来像摄影机:

label.LookAt(camera.position);

请参阅。使用上述方法并将纹理应用于精灵可以使事情变得更简单。特别是在标签和/或相机是旋转父对象的子对象的情况下。您现在将如何做到这一点?当我使用最新版本的threejs执行此操作时,文本看起来被拉伸了。听起来您使用的网格正在拉伸纹理。您是否尝试过调整平面几何图形的大小?