我正在用Javascript编写一个软件3d引擎,渲染到2d画布上。我完全被困在一个与从3d世界到2d屏幕坐标投影有关的问题上。
到目前为止,我已经:
我正在画一个平面,当所有4个顶点(2个三轴)都在屏幕上时,一切都正常。当我驾驶相机飞越飞机时,在某一点上,屏幕外的顶点会转换到屏幕的顶部。当透视坐标超过1时,这一点似乎是一致的。我有一个例子说明了我的意思--按下向前看它翻转:
http://davidgoemans.com/phaser3d/
代码不会减少,所以web工具可以很容易地检查,但是我也将源代码放在这里:
https://github.com/dgoemans/phaser3dtest/tree/fixcanvas
提前感谢!
注意:我使用的是相位,目前并不是真的做任何事情,但我的计划是混合2d和3d。它不应该对3d数学产生任何影响。
发布于 2015-08-09 16:22:12
当投影点位于虚拟相机的后面时,结果将被投影在它的前面,镜像。x/z和-x/-z是一样的。
在绘制管道时,这个问题是通过裁剪算法解决的,该算法通过裁剪平面将原语相交。在您的情况下,一个单一的剪裁平面,位于您的相机前面的某处,是足够的(在渲染管道,一个通常是使用6个剪裁平面来描述一个完整的观看量)。您必须防止这样的情况:一个原语在摄像机前面至少有一个点,而后面至少有一个点(而且您必须丢弃完全位于后面的原语,但这是相当微不足道的)。裁剪必须在透视分割之前完成,这也是为什么投影矩阵转换到的空间被称为剪辑空间。
https://stackoverflow.com/questions/31905938
复制相似问题