OpenGL,投影矩阵 - 盒子前面较小......?

时间:2016-02-29 21:52:17

标签: matrix webgl

我正在学习WebGL,我试图了解如何构建透视矩阵。我想我差不多了......我只是坚持了一个小问题,那就是当我用投影矩阵乘以我的顶点时,我希望正在看的盒子前面变得更大,而是它变小了,背部变大了。我附上了一个屏幕截图: (绿色的一面是正面) enter image description here

我的透视矩阵看起来像这样..

    var aspectRatio = 600 / 600;
    var fieldOfView = 30;
    var near = 1;
    var far = 2;

    myPerspectiveMatrix = [
        1 / Math.tan(fieldOfView / 2), 0, 0, 0,
        0, 1 / Math.tan(fieldOfView / 2), 0, 0,
        0, 0, (near + far) / (near - far), (2 * (near * far)) / (near - far),
        0, 0, -1, 0
    ];

    app.uniformMatrix4fv(uPerspectiveMatrix, false, new Float32Array(myPerspectiveMatrix));

我的顶点着色器是..

attribute vec3 aPosition;
attribute vec4 aColor;

uniform mat4 uModelMatrix;
uniform mat4 uPerspectiveMatrix;

varying lowp vec4 vColor;

void main()
{
    gl_Position = uPerspectiveMatrix * vec4(aPosition, 5.0);
    //gl_Position = uPerspectiveMatrix * uModelMatrix * vec4(aPosition, 2.0);
    vColor = aColor;
}

1 个答案:

答案 0 :(得分:1)

这里可能发生的是你的三角形按顺时针顺序绘制(顺时针方向而不是逆时针方向,反之亦然),所以你看到了方框的“内部”。

有很多方法可以解决这个问题。我的建议是修正你用来绘制框的索引的顺时针顺序。

或者,快速修复可能是使用glFrontFace更改“正面”。