Threejs中文本几何的问题

时间:2017-06-01 00:52:33

标签: three.js

我尝试使用THREE.FontLoader渲染一些3D文本。对象在场景中但不会出现。我认为唯一可能是问题的是,无论出于何种原因,网格似乎都有一个BufferGeometry而不是TextGeometry。我的代码有什么问题吗?

链接到我的代码:

https://puu.sh/w78xs/3e350985e1.png

2 个答案:

答案 0 :(得分:0)

缓冲测量不是问题所在。如果查看源代码,大多数THREE.XxxxXxxxxGeometry在幕后的某处使用BufferGeometry。

我看到的第一件事是你的场景中没有灯光。请尝试MeshBasicMaterial以确保其正常运行。 Phong期待灯光。 MeshBasicMaterial只会将它涂成平面颜色。

另外,请确保您的相机未放置在模型内,然后再拨打camera.lookAt(textmesh.position);以确保它不会掉头。

答案 1 :(得分:0)

我假设你的场景中有灯光,而你的相机方向正确。

loader.load调用是异步的,但您正在同步创建网格。

// This is an asynchronous call, which may take some time.
loader.load('/assets/delvetiker_regular.typeface.json', 
    function(font){
        // This function is a callback, and is only executed AFTER load completes
        geometry = ...;
    });

//...

// At this point, geometry MAY OR MAY NOT EXIST.
// If it doesn't, this won't work.
mesh = new THREE.Mesh(geometry, mat);

如果您将底部的所有代码移动到里面您的加载程序回调,您应该看到差异。

// This is an asynchronous call, which may take some time.
loader.load('/assets/delvetiker_regular.typeface.json', 
    function(font){
        // This function is a callback, and is only executed AFTER load completes
        geometry = ...;
        mat = ...'
        // At this point, geometry DOES EXIST.
        mesh = new THREE.Mesh(geometry, mat);
        super(...);
    });

//...

我还假设调用super将网格添加到场景中,但如果没有,则还需要在加载器回调中调用scene.add(mesh)