Я работал над демонстрацией рендеринга перспективной проекции с использованием 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, извините за это.
Любая иллюстрация будет оценена, спасибо.