Проблемы с перспективной проекцией при увеличении

Я работал над демонстрацией рендеринга перспективной проекции с использованием javascript, недавно я добавил перспективную проекцию, и она работает так, как должна, за исключением случаев, когда я увеличиваю масштаб.

Вот изображение этого странного поведения:
введите описание изображения здесь

Обратите внимание, как линии сетки собираются в одной точке.

Поэтому я сомневаюсь в двух вещах, кроме того, что формулы масштабирования, которые я использую, неверны или есть что-то, чего я не понимаю в математике перспективной проекции.

Для увеличения у меня просто глобальная переменная window.scaleFactor, которую я умножаю на каждую точку:

Point.prototype.projection = function(matrix){
    var point = $M([[this.x *window.scaleFactor],[this.y * window.scaleFactor],[this.z * window.scaleFactor],[1]]);
    var projection = matrix.x(point);
    return new Point(projection.e(1,1)/projection.e(4,1) + window.panX,projection.e(2,1)/projection.e(4,1) + window.panY,0);
}

Так это правильно, или вычисление увеличения должно быть связано с точкой обзора?

Вы можете попробовать демоверсию здесь: http://ahmedkotb.0fees.net/3d/projection_demo.html

РЕДАКТИРОВАТЬ: вы можете масштабировать с помощью колесика мыши и вращать, перетаскивая внутри холста ... Также я не тестировал это, кроме как на chrome, извините за это.

Любая иллюстрация будет оценена, спасибо.


person Ahmed Kotb    schedule 14.08.2011    source источник


Ответы (1)


Я думаю, проблема в следующем: когда вы увеличиваете масштаб, некоторые из ваших линий выходят за пределы камеры, и вы не обрезаете их (линии). Артефакт, который я вижу, типичен для проекции без обрезки. Решение: обрезайте свои линии или используйте другую библиотеку 3D-рендеринга, которая будет обрезана для вас.

person Samuel Hornus    schedule 29.08.2011
comment
Имеет ли для вас смысл мой ответ? - person Samuel Hornus; 05.09.2011