2010-03-07 91 views
2

我正在看OpenGL中的陰影映射。陰影映射中的偏差矩陣

我看到這樣的代碼:

// This is matrix transform every coordinate x,y,z 
// x = x* 0.5 + 0.5 
// y = y* 0.5 + 0.5 
// z = z* 0.5 + 0.5 
// Moving from unit cube [-1,1] to [0,1] 
const GLdouble bias[16] = { 
    0.5, 0.0, 0.0, 0.0, 
    0.0, 0.5, 0.0, 0.0, 
    0.0, 0.0, 0.5, 0.0, 
    0.5, 0.5, 0.5, 1.0}; 

// Grab modelview and transformation matrices 
glGetDoublev(GL_MODELVIEW_MATRIX, modelView); 
glGetDoublev(GL_PROJECTION_MATRIX, projection); 


glMatrixMode(GL_TEXTURE); 
glActiveTextureARB(GL_TEXTURE7); 

glLoadIdentity(); 
glLoadMatrixd(bias); 

// concatating all matrice into one. 
glMultMatrixd (projection); 
glMultMatrixd (modelView); 

// Go back to normal matrix mode 
glMatrixMode(GL_MODELVIEW); 

現在,如果我撕裂了偏置矩陣。該代碼不起作用。搜索其他陰影映射代碼,我看到相同的偏差矩陣,沒有任何解釋。爲什麼我要這個偏差將x,y,z映射到0.5 * x + 0.5,0.5 * y + y,...?

謝謝!

回答

5

當您使用標準模型視圖/投影矩陣來轉換視錐內的頂點時,得到的結果是一旦w分割完成後的頂點位於[-1:1] x [-1:1 ]×[-1:1]立方體。您希望紋理座標位於[0:1] x [0:1]範圍內,因此可以重新映射x和y。對於Z來說,這是一樣的事情,假設你的DepthRange是[0:1],這是默認設置。