阴影映射中的偏差矩阵

ano*_*non 3 opengl

我在看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);
Run Code Online (Sandbox Code Playgroud)

现在,如果我撕掉偏差矩阵.代码不起作用.搜索其他阴影映射代码,我看到相同的偏差矩阵,没有任何解释.为什么我希望这种偏差将x,y,z映射到0.5*x + 0.5,0.5*y + y,......?

谢谢!

Bah*_*bar 5

当您使用标准模型视图/投影矩阵转换平截头体内的顶点时,您得到的结果是一个顶点,一旦完成w-divide,就在[-1:1] x [-1:1] x [ - 1:1]立方体.您希望纹理坐标位于[0:1] x [0:1]范围内,因此重新映射x和y.假设您的DepthRange是[0:1],这是默认的Z,这与Z 的情况相同.