首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >软件3d引擎中的投影数学

软件3d引擎中的投影数学
EN

Stack Overflow用户
提问于 2015-08-09 15:40:03
回答 1查看 614关注 0票数 0

我正在用Javascript编写一个软件3d引擎,渲染到2d画布上。我完全被困在一个与从3d世界到2d屏幕坐标投影有关的问题上。

到目前为止,我已经:

  • 相机投影和视图矩阵。
  • 变换模型顶点(v )
  • 获取结果,并将x和y除以z(透视)坐标,生成视口和弦。
  • 根据视口大小缩放生成的2d矢量。

我正在画一个平面,当所有4个顶点(2个三轴)都在屏幕上时,一切都正常。当我驾驶相机飞越飞机时,在某一点上,屏幕外的顶点会转换到屏幕的顶部。当透视坐标超过1时,这一点似乎是一致的。我有一个例子说明了我的意思--按下向前看它翻转:

http://davidgoemans.com/phaser3d/

代码不会减少,所以web工具可以很容易地检查,但是我也将源代码放在这里:

https://github.com/dgoemans/phaser3dtest/tree/fixcanvas

提前感谢!

注意:我使用的是相位,目前并不是真的做任何事情,但我的计划是混合2d和3d。它不应该对3d数学产生任何影响。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-08-09 16:22:12

当投影点位于虚拟相机的后面时,结果将被投影在它的前面,镜像。x/z-x/-z是一样的。

在绘制管道时,这个问题是通过裁剪算法解决的,该算法通过裁剪平面将原语相交。在您的情况下,一个单一的剪裁平面,位于您的相机前面的某处,是足够的(在渲染管道,一个通常是使用6个剪裁平面来描述一个完整的观看量)。您必须防止这样的情况:一个原语在摄像机前面至少有一个点,而后面至少有一个点(而且您必须丢弃完全位于后面的原语,但这是相当微不足道的)。裁剪必须在透视分割之前完成,这也是为什么投影矩阵转换到的空间被称为剪辑空间。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31905938

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档