透视投影在缩放时的问题

4

我一直在使用JavaScript制作透视投影渲染演示,最近我添加了透视投影,它的工作方式很正常,只是当我放大时出现了问题。

这里是这种奇怪行为的图片:
enter image description here

请注意如何使网格线聚集到一个点。

所以我对两件事有疑问:我正在使用的缩放公式是否不正确,或者在透视投影数学中有些东西我还没有理解。

对于缩放,我只有一个全局变量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上测试过这个。任何插图都将不胜感激,谢谢。
1个回答

3

我认为问题如下:当您放大时,一些线条会到达相机后方,但您没有对这些线条进行裁剪。我能看到的伪像是非裁剪投影的典型表现。解决方案:裁剪您的线条,或者使用另一个可以为您裁剪的3D渲染库。


我的回答对你有意义吗? - Samuel Hornus

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接