5

我的顶点线是:

GLfloat vertices[]=
    {
        0.5f,0.5f,0.5f,                                   
        -0.5f,0.5f,0.5f,
        -0.5f,-0.5f,0.5f,
        0.5f,-0.5f,0.5f,//face 1

        0.5f,-0.5f,-0.5f,
        -0.5f,-0.5f,-0.5f,
        -0.5f,0.5f,-0.5f,
        0.5f,0.5f,-0.5f,//face 2

        0.5f,0.5f,0.5f,
        0.5f,-0.5f,0.5f,
        0.5f,-0.5f,-0.5f,
        0.5f,0.5f,-0.5f,//face 3                

        -0.5f,0.5f,0.5f,
        -0.5f,0.5f,-0.5f,
        -0.5f,-0.5f,-0.5f,
        -0.5f,-0.5f,0.5f,//face 4

        0.5f,0.5f,0.5f,
        0.5f,0.5f,-0.5f,
        -0.5f,0.5f,-0.5f,
        -0.5f,0.5f,0.5f,//face 5

        -0.5f,-0.5f,0.5f,
        -0.5f,-0.5f,-0.5f,
        0.5f,-0.5f,-0.5f,
        0.5f,-0.5f,0.5f//face 6     

    };

现在,我正在通过以下方式更改 z 线:

for(int i=0;i<24;i++)
    vertices[i*3+2]*=10
glDepthRange(0,10.0);

现在,由于 glDepthRange 调用,我期望 z 线将映射到 -0.5 到 0.5 的范围,并且我可以看到一个合适的立方体,但是当我使用扭曲的几何图形在上面评论 glDepthRange 调用时,它会给出 o/p。

4

1 回答 1

6

让我引用你的手册页:

剪裁除以 w 后,深度坐标的范围为 -1 到 1,分别对应近剪裁平面和远剪裁平面。glDepthRange 指定此范围内的归一化深度坐标到窗口深度坐标的线性映射。无论实际的深度缓冲区实现如何,窗口坐标深度值都被视为范围从 0 到 1(如颜色分量)。因此,glDepthRange 接受的值在被接受之前都被限制在这个范围内

突出我的

换句话说,你不能真正使用大于 1 的深度值;相反,您必须自己正确计算它们。它基本上总结为在您的投影矩阵中设置适当near的值并在您的模型视图矩阵中转换Z 坐标,以便所有最终 Z 都在上述之间。far

如果您需要更详细的解释,请发表评论。

于 2013-01-07T12:25:40.710 回答