2017-03-03 24 views
0

我有下面的代碼生成一些網格。我想3D文本添加到現場,但是當我這樣做,我得到以下錯誤:three.js fontloader無法讀取未定義的形狀

TypeError: Cannot read property 'generateShapes' of undefined 

這是代碼我必須生成網格和3D文字:

var x = 0; 
var y = 0; 
var finalSize = 450; 
var textureLoader = new THREE.TextureLoader(); 
var fontLoader = new THREE.FontLoader(); 

的var字體是不確定的原因?

var font = fontLoader.load('css/arial_bold.json'); 
var fontColor = textMaterial = new THREE.MeshBasicMaterial({ color: 0x000000, overdraw: 0.5 }); 

for (var i = javascriptProjects.length - 1; i >= 0; i--) { 

    var object = {}; 
    object.scale = javascriptProjects[i].baseImageData["0"]/finalSize; 
    var geometry = new THREE.PlaneGeometry(javascriptProjects[i].baseImageData["0"]/object.scale,javascriptProjects[i].baseImageData["1"]/object.scale, 10, 10); 
    object.texture = textureLoader.load("data/"+ javascriptProjects[i].base_image); 
    object.material = new THREE.MeshBasicMaterial({ map: object.texture, overdraw: 0.5, transparent: true }); 
    object.material.opacity = 0.5; 
    object.mesh = new THREE.Mesh(geometry, object.material); 

//下面一行生成錯誤

object.FontGeo = new THREE.TextGeometry(javascriptProjects[i].project_name , { 
     font: font, 
     size: 50, 
     height: 2, 
     curveSegments: 12, 
     bevelThickness: 1, 
     bevelSize: 1, 
     bevelEnabled: false 
    }); 
    object.textMesh = new THREE.Mesh(object.FontGeo, fontColor); 
    object.textMesh.position.x = object.location.x; 
    object.textMesh.position.y = object.location.y; 
    object.textMesh.position.z = object.location.z - 100; 

    scene.add(object.textMesh); 

    object.location = new THREE.Vector3(x, 120, y); 
    object.id = "" + javascriptProjects[i].project_id; 
    object.mesh.position.x = object.location.x; 
    object.mesh.position.y = object.location.y; 
    object.mesh.position.z = object.location.z; 


    scene.add(object.mesh); 
    meshes.push(object.mesh); 
    objects.push(object); 


    x += 600; 
    if(i % 3 == 0){ 
     y += 600; 
     x = 0; 
    }; 
}; 

顯然字體是未定義的。爲什麼我不明白我做錯了什麼。任何建議都會很棒。如果有什麼不清楚的,請告訴我。

預先感謝

+0

你可以通過調試器,看看你的哪些變量是未定義的。 – gaitat

+0

查看未定義變量的更新答案 – FutureCake

回答

1

FontLoader.load()是一個異步函數調用。這就是爲什麼有一個onLoad回叫功能。

在加載font之前,庫正在調用font.generateShapes()

使用一種模式像這樣的,而不是:

var loader = new THREE.FontLoader(); 
loader.load('myFontFile.json', function (font) { 

    // insert your code here 

}); 

見,例如,this three.js example和three.js所documentation

three.js r.84