WebGL为什么要拉长对象大小

时间:2017-02-25 20:56:46

标签: javascript glsl webgl

我正在使用webgl并且我的对象看起来不正确 - 它们的z长度比它应该大得多

HOW SHOULDN'T LOOK

在图片右上方的立方体是如此之长,为什么会发生? 我的MVPmatrix看起来像:

var y = Math.tan(fovy / 2);
    var x = y / ratio;
    var d = 1;
    var out = new Mat4([
        x, 0, 0, 0,
        0, y, 0, 0,
        0, 0, (far + near) / (far - near), d,
        0, 0, -2 * (far * near) / (far - near), 0
    ]);

立方体着色器:

`#define MAX_POINTLIGHTS 16

        attribute vec3 a_Position;
        attribute vec3 a_Normal;

        uniform mat4 u_MVMatrix;
        uniform mat4 u_MVPMatrix;
        uniform mat3 u_MVNMatrix;
        uniform vec3 u_PointLights[MAX_POINTLIGHTS];

        varying float v_Light;

        void main(void) {
            vec4 position4 = u_MVMatrix * vec4(a_Position, 1.0);
            vec3 position3 = position4.xyz / position4.w;

            float light = 0.0;
            for (int i = 0; i < 1; i++) {
                vec3 lightDir = normalize(u_PointLights[0] - position3);
                vec3 normal = normalize(u_MVNMatrix * a_Normal);

                light += max(dot(normal, lightDir), 0.0);
            }
            v_Light = min(light, 1.0);

            gl_Position = u_MVPMatrix * position4;
        }`,

        `precision mediump float;

        uniform vec4 u_DiffuseColor;

        varying float v_Light;

        void main(void) {
            gl_FragColor = vec4(u_DiffuseColor.rgb * v_Light, u_DiffuseColor.a);
        }`

我真的没有想法。我有旧的引擎,我做得很好,所以这2个项目在代码中几乎没有任何不同,但它不适用于新的。 你有什么想法吗?非常感谢!

0 个答案:

没有答案