2014-11-21 17 views
0

我正在製作WebGL圖形庫,並無法從OBJ Wavefront創建正確的陣列(這絕對正確)。看起來像一個簡單的錯誤修復,但無法找到它。想知道是否有人可能會識別這種類型的錯誤。Wavefront文件轉換爲WebGL陣列出錯了某處

Teapot with wrong faces

你可以看看現場樣品在這裏: http://robjte.de/webgl/8-3d.html

這裏是我懷疑導致問題的功能。

function objectify (str) { 
    var vertexRegex = /^v(?:\s(-?\d+.?(?:\d+)?))\s(-?\d+.?(?:\d+)?)\s(-?\d+.?(?:\d+)?)$/gim; 
    var faceRegex = /^f\s(\d+)\s(\d+)\s(\d+)$/gim; 
    var commentRegex = /^\s*\#.*$/gim; 
    var emptyLineRegex = /^$/gim; 

    var vertices = []; 
    var faces = []; 

    var m, i = 0; 
    while (m = faceRegex.exec(str)) { 
     faces.push([m[1], m[2], m[3]]); 
     i++; 
    } 

    var m, i = 0; 
    while (m = vertexRegex.exec(str)) { 
     vertices.push([m[1], m[2], m[3]]); 
     i++; 
    } 

    return {vertices: vertices, faces: faces}; 
} 

function facesVerticesToWebGL (obj) { 
    var f = obj.faces; 
    var v = obj.vertices; 

    var arr = []; 
    f.forEach(function (val) { 
     var vArr = v[parseInt(val) - 1]; 
     vArr.forEach(function (val2) { 
      arr.push(parseFloat(val2)); 
     }); 
    }); 

    return arr; 
} 

回答

1

我使用triple forEach塊修復了它。我的錯誤是vArr是一個數組,parseInt只導致第一個值被使用,所以我只繪製了三分之一的所需頂點。

3

我不知道究竟是你的代碼錯誤,但這裏是一個very nicely commented版本,所以也許看看這,看看那裏的差異。