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
Просто отладьте его и посмотрите, каковы их значения.