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