Member 13521074 Ответов: 0

Javascript/ webgl - функция возвращает различные значения при втором вызове


DisplaySurface.prototype.projectionMatrix = function(eye, znear, zfar){
    var mat = new Mat4();
    mat.loadIdentity();
    // ...  

    var br = new Vec3.add(this.u, this.origin), //pb
        tl = new Vec3.add(this.v, this.origin); //pc

    var bre = new Vec3.subtract(br, eye),
        tle = new Vec3.subtract(tl, eye);

    var u = this.u.normalize(),
        v = this.v.normalize(),
        n = this.n.normalize(),
        eyedist = Vec3.dot(bre, n);

    var l = Vec3.dot(tle, u)*znear/eyedist,
        r = Vec3.dot(bre, u)*znear/eyedist,
        b = Vec3.dot(bre, v)*znear/eyedist,
        t = Vec3.dot(tle, v)*znear/eyedist;

    console.log(r-l);

    mat.frustum(l, r, b, t, znear, zfar);
    console.log(mat);
    return mat;
};

Mat4.prototype.frustum = function(left, right, bottom, top, near, far){
    var a = this._;
    var n2 = 2.0*near,
        diffX = right - left,
        diffY = top - bottom,
        diffZ = far - near;
    a[0] = n2/diffX;
    a[1] = 0;
    a[2] = 0;
    a[3] = 0;

    a[4] = 0;
    a[5] = n2/diffY;
    a[6] = 0;
    a[7] = 0;

    a[8] = (right + left) / diffX;
    a[9] = (top + bottom) / diffY;
    a[10] = -(far + near) / diffZ;
    a[11] = -1.0;

    a[12] = 0.0;
    a[13] = 0.0;
    a[14] = -(n2 * far) / diffZ;
    a[15] = 0.0;
};


Что я уже пробовал:

Итак... предполагается, что это возвращает матрицу проекции. Все идет гладко на первом кадре, а потом я начинаю получать странные результаты. Я никогда не работал с javascript, и я уже некоторое время пытаюсь понять это - единственная подсказка, которую я получил, заключается в том, что (l-r), кажется, производит странные результаты, хотя (l) сам по себе прекрасен.

@Редактировать. Да, т и Р-это проблема. Хотя почему? :(

ZurdoDev

Просто отладьте его и посмотрите, каковы их значения.

0 Ответов