所以,我想创建20个文本块(使用相同的字体)。
如果字体尚未加载,则新的TextGeometry会发送错误。
目前,我把每个
new THREE.TextGeometry(this.text, {
font: Object(response) as THREE.Font
} as THREE.TextGeometryParameters);
内部:
let fontLoader = new THREE.FontLoader();
fontLoader.load('/fonts/my_font.json', response => {
这种方法效率非常低,因为字体被加载了20次(每个新文本加载一次)。它减慢了执行速度(当我做测试时很烦人)。
我只想加载字体一次并将其保存在一个var中,但我不知道如何等到它加载后才能生成TextGeometry。
我猜这和观察物有关吧?
非常感谢。
发布于 2017-03-16 17:38:50
例如,您可以这样做:
var manager = new THREE.LoadingManager();
manager.onLoad = function() { // when all resources are loaded
init();
render();
}
var font = null;
var loader = new THREE.FontLoader(manager);
loader.load('https://threejs.org/examples/fonts/droid/droid_serif_bold.typeface.json', function(response) {
font = response;
});
在init()
中
function init(){
// create instances of scene, camera and renderer
...
function setText(text, position) { // actually, here you can have any parameters you want for your text
textGeo = new THREE.TextGeometry(text, {
font: font,...
}
}
主要思想是先使用所有资源,然后再使用其他资源。
jsfiddle示例
https://stackoverflow.com/questions/42829635
复制相似问题