首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何只加载一次字体?(TS / Three.JS)

如何只加载一次字体?(TS / Three.JS)
EN

Stack Overflow用户
提问于 2017-03-16 17:11:34
回答 1查看 1.5K关注 0票数 2

所以,我想创建20个文本块(使用相同的字体)。

如果字体尚未加载,则新的TextGeometry会发送错误。

目前,我把每个

代码语言:javascript
复制
new THREE.TextGeometry(this.text, {
    font: Object(response) as THREE.Font
} as THREE.TextGeometryParameters);

内部:

代码语言:javascript
复制
let fontLoader = new THREE.FontLoader();    
fontLoader.load('/fonts/my_font.json', response => {

这种方法效率非常低,因为字体被加载了20次(每个新文本加载一次)。它减慢了执行速度(当我做测试时很烦人)。

我只想加载字体一次并将其保存在一个var中,但我不知道如何等到它加载后才能生成TextGeometry。

我猜这和观察物有关吧?

非常感谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-16 17:38:50

例如,您可以这样做:

代码语言:javascript
复制
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()

代码语言:javascript
复制
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,...
    }
}

主要思想是先使用所有资源,然后再使用其他资源。

关于THREE.LoadingManager()

jsfiddle示例

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42829635

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档