投影数学在软件3d引擎
Projection math in software 3d engine
我正在用Javascript编写一个软件3d引擎,渲染到2d画布。我完全陷入了一个与从3d世界到2d屏幕坐标的投影有关的问题。
到目前为止,我有:- 相机投影和视图矩阵。
- 转换的模型顶点(v x ModelViewProj)。
- 取结果并将x和y除以z(透视)坐标,生成视口坐标。
- 根据视口大小缩放生成的2d矢量。
我正在绘制一个平面,当所有4个顶点(2个三角形)都在屏幕上时,一切都工作了。当我的相机在平面上飞行时,在某个点,屏幕外的顶点转换到屏幕的顶部。这一点似乎与透视坐标大于1的时候一致。我有一个例子来说明我的意思——按前进键看到它翻转:
http://davidgoemans.com/phaser3d/代码没有被缩小,所以web开发工具可以很容易地检查,但我也把源代码放在这里:
https://github.com/dgoemans/phaser3dtest/tree/fixcanvas提前感谢!
注意:我正在使用相位器,目前没有真正做任何事情,但我的计划是混合2d和3d。它不应该对3d数学有任何影响
当投影点位于虚拟摄像机的后面时,结果将投影到它的前面,镜像。x/z
和-x/-z
是一样的
在渲染管道中,这个问题是通过剪切算法解决的,该算法通过剪切平面与原语相交。在你的情况下,一个单一的裁剪平面位于相机前面的某个地方,就足够了(在渲染管道中,一个人通常使用6个裁剪平面来描述一个完整的观看体)。您必须防止这样的情况:单个原语至少有一个点在相机前面,而至少有另一个点在相机后面(并且您必须丢弃完全位于后面的原语,但这是相当微不足道的)。剪辑必须在透视分割之前完成,这也是为什么投影矩阵变换到的空间被称为剪辑空间的原因。
相关文章:
- 表达式引擎扩展开发-向呈现的条目添加自定义javascript
- 谷歌文档表面引擎
- 自定义运行时Can'在谷歌应用引擎中看不到我的自定义日志
- 从js引擎的角度来看闭包和构造函数是如何工作的
- Javascript-模板引擎
- 如何使用jQuery验证引擎验证组
- javascript中的表达式引擎字段
- Highcharts 3d调整zindex错误
- 布局引擎和javascript引擎之间的区别
- 使用Node.js在应用程序引擎上进行本地单元测试
- 扩展Nashorn-ecma引擎以添加新的运算符和类型
- HighCharts:3D柱形图在选择时更改边框颜色
- 3d上的深度比例错误
- 寻找引擎去开发带有贴图的2d或3d等角html5游戏
- 支持陀螺仪力的3d物理引擎
- 用于2D开发的3D JS引擎
- 投影数学在软件3d引擎
- 用于2D画布的人造3D引擎/库
- 3D 引擎在旋转时拉伸对象
- 寻找一些不错的&简单的HTML 5 3d引擎,类似于papervision3d的flash