2014-11-15 42 views
1

我正在研究3D函數庫(爲了好玩),並且無法在我的代碼中找到錯誤。從我所看到的,我的代碼和預製庫生成的矩陣完全相同。我使用相同的頂點位置,但沒有任何顯示,這讓我發瘋。WebGL代碼與預製庫產生相同的矩陣但不顯示相同

我的版本:
http://robjte.de/webgl/notworking.html
http://jsfiddle.net/uh9574z0/

預先做好工作版本(目標輸出):
http://robjte.de/webgl/working.html
http://jsfiddle.net/5daae976/

我的控制檯登錄每個版本的矩陣。

主要部分(我的版本):

var translate = [0.5, 0, 0]; 
var modelMatrix = identity(4); 
modelMatrix.setXY(3, 0, translate[0]); 
modelMatrix.setXY(3, 1, translate[1]); 
modelMatrix.setXY(3, 2, translate[2]); 

var eye = createVector([0, 0, 2.25]); 
var focus = createVector([0, 0, 0]); 
var up = createVector([0, 1, 0]); 

modelMatrix = modelMatrix; 
var viewMatrix = lookAt(eye, focus, up); 
var projectionMatrix = perspective(canvas, 50 * Math.PI/180, 1, 10); 


主要部分(工作版本):

// local coords -> world space 
var modelMatrix = mat4.create(); 
mat4.translate(modelMatrix, modelMatrix, vec3.fromValues(0.5, 0.0, 0.0)); 

// world space -> camera space 
var eye = vec3.fromValues(0, 0, 2.25); 
var lookAt = vec3.fromValues(0, 0, 0); 
var up = vec3.fromValues(0, 1, 0); 
var viewMatrix = mat4.create(); 

mat4.lookAt(viewMatrix, eye, lookAt, up); 

var projMatrix = mat4.create(); 
mat4.perspective(projMatrix, 50 * Math.PI/180, canvas.clientWidth/canvas.clientHeight, 1, 10); 

回答

1

我想通了。我的數組按照主要順序排列,而不是GLSL要求的列主要順序。這對我有很大的幫助:Correct OpenGL matrix format?

+1

很高興你發現你的問題。僅供參考,列專業和行專業不是存儲問題,而是數據如何用於數學功能的問題。你可以交換他們存儲的方式,並以他們在數學函數中使用的方式交換,你會得到相同的結果。 – gman

2

我不認爲你的數學庫實際上會產生相同的結果。我使用WebGL Inspector來查看每個鏈接中的程序狀態。有幾個非常顯着的差異。

not the same

+0

好的。感謝與該檢查員的鏈接,可能非常有用。 – robjtede

相關問題