2016-02-09 75 views
12

我得到的錯誤十萬(谷歌瀏覽器):三JS進口OBJ模型[.CommandBufferContext]渲染警告:渲染計數或primcount是0

[.CommandBufferContext]RENDER WARNING: Render count or primcount is 0. 

OBJ和MTL文件出口從Bledner,使用OBJMTLLoader.js作爲裝載機 移至R73後。

有沒有經驗?

+0

我從攪拌機中導出的網格得到這個錯誤。我做了兩件似乎有幫助的事情: 1.選擇你的物體,進入編輯模式,按'a'選擇所有面,然後按'w'並從菜單中選擇** Remove Doubles **。這將刪除重複的頂點。 2.選擇你的對象,進入編輯模式,按'a'選擇所有面,然後按'space'鍵,然後輸入「選擇鬆散幾何體」,按回車鍵,然後按'x'鍵刪除所選內容,然後按點擊'頂點'。再次按'x'並選擇'邊緣'。再次按下'x'並選擇'faces'。我不知道是否有必要做所有這些。 –

+0

刪除雙打不是個好主意,特別是如果您使用EdgeSplit或其他功能依賴於分割的面。 – Martin

回答

11

當低層渲染調用被告知繪製零頂點/面時會發生這種情況。這是因爲你有一個或多個具有零面/頂點的多邊形網格,所以在每次繪製調用時,這個錯誤堆積起來。

問題可能是您的模型,或者它可能是導出/導入過程。如果是模型,那麼下面是關於如何找到有問題的區域的鬆散想法。我不推薦在ThreeJS和Blender中使用OBJMTLLoader,因爲ThreeJS帶有用於導出的Blender插件,並且它可以工作。

checkMesh = function(mesh, child_index) { 
 
    if (
 
    mesh.geometry.faces.length > 0 && 
 
    mesh.geometry.vertices.length > 0 
 
) { 
 
    // do stuff here with the good mesh 
 

 
    for (var i = 0; i < mesh.children.length; i++) 
 
     if (!checkMesh(mesh.children[i], i)) 
 
     i--; // child was removed, so step back 
 

 
    return true; 
 
    } else // empty mesh! this causes WebGL errors 
 
    { 
 
    if (mesh.parent != null) 
 
     mesh.parent.children.splice(child_index, 1); 
 

 
    console.log(mesh.name + " has zero faces and/or vertices so it is removed."); 
 
    mesh = null; 
 

 
    return false; 
 
    } 
 
}

0

很難說如果沒有看到您的代碼會出現什麼問題,但我會建議嘗試JSON導出和導入。在three.js sourse中,轉到utils/exporters/blender並安裝JSON導出器(請檢查readme.md)。然後將模型導出到JSON仔細檢查導出選項(幾何類型,UV,紋理)。然後,你可以導入你的模型是這樣的:

var loader = new THREE.JSONLoader(); 
loader.load("model.json", function(geometry, material) { 
    var m = new THREE.MultiMaterial(material); 
    var o = new THREE.Mesh(geometry, m); 
    scene.add(o); 
}); 

我沒有比較OBJ/MTL,但相比之下爲COLLADA格式,JSON裝載機是方式更快。

+0

我無法從OBJ文件切換到JSON。 – Martin