BlenderCN论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1748|回复: 3

无人机渲染器开发记录

[复制链接]
发表于 2016-12-21 19:03:51 | 显示全部楼层 |阅读模式
本帖最后由 蒜薹 于 2016-12-22 16:11 编辑

目标:渲染器是用来进行虚拟摄像机成像的程序,其使用的数学方法包括平移、旋转、缩放、投影等空间变换,欧拉角基本原理,光线追踪等。本次开发就是使用上述数学方法将虚拟三维空间中的点、线、面投影到虚拟摄像机的感光元件中,并且以图片或者视频的形式呈现出来。

方法:基本的数学方法是矩阵的空间变换,大量使用矩阵点乘,也包括矩阵逆运算等方法。使用blender模拟三维场景、空间变换矩阵测试、以blender的摄像机作为参照验证自行编写渲染器的正确性等,使用python在blender中进行脚本编程。预期使用C/C++在Microsoft的Visual Studio平台下编写程序,用来做渲染器的空间变换、光线追踪和图片显示。前期调试时,使用python在blender平台下编写程序,做空间变换矩阵、光线追踪的数学验证,摄像机投影的验证等。

空间变换矩阵测试
    三维空间的变换包括平移(tranlation),旋转(rotation),缩放(scaling),剪切(shearing)和投影(projection),都以4*4的矩阵表现。三维空间中的点以4*1矩阵表示,也可以看成向量,前三个参数为点在空间三个坐标轴上的分量,最后一个参数为1。三维空间中的向量同样以4*1矩阵表示,前三个也分别为三个轴上的分量,而最后一个参数则为0。实际进行空间变换的时候,使用变换矩阵点乘点的向量,具体计算方法可以参考(Möller T, Haines E, Hoffman N. Real-time rendering.[M]. 1999.用最新版的就好了)。
    通过在blender中编写python脚本,验证了上述五种变换,下面给出投影的图示。

投影-正交-前-低清晰度.jpg 投影-正交-后-低清晰度.jpg
图1 投影变换,使用正交投影,沿x轴投影,左图为投影前,右图为投影后

摄像机测试
    在虚拟的三维空间中假设一台摄像机和若干点,在blender中,使用blender自身提供的摄像机(Cameral),若干点使用立方体(Cube*),投影后的点使用球(Cube*-s)表示。摄像机的计算流程分为几步,首先将空间中立方体按照摄像机的坐标的负值进行移动,参考图2;然后将这些立方体按照摄像机的旋转角进行旋转,旋转矩阵参见图3;最后将这些立方体沿着z轴投影,这里做正交投影,参见图4。需要说明的是,这里的变换全是在全局坐标系下完成的。
    这里没有验证的是旋转的顺序问题,摄像机的旋转角使用的是blender提供的欧拉角,使用XYZ顺序,本次测试的代码中,所有立方体的旋转则按照ZYX的顺序,也就是反序进行旋转。参见图5。

平移矩阵

平移矩阵

图2 摄像机投影中的平移矩阵

旋转矩阵

旋转矩阵

图3 摄像机投影中的旋转矩阵
摄像机投影-投影矩阵-正交-代码.png
图4 摄像机投影中的正交投影矩阵

矩阵点乘

矩阵点乘

图5 摄像机投影中的空间变换矩阵点乘


投影-正交-后-低清晰度.jpg
 楼主| 发表于 2016-12-21 19:14:32 | 显示全部楼层
本帖最后由 蒜薹 于 2016-12-21 19:33 编辑

这里附上完整代码





matrice.zip

206.59 KB, 下载次数: 649

回复 支持 反对

使用道具 举报

发表于 2017-4-26 20:44:11 | 显示全部楼层
估计楼主 和 stuffmatic 、Marco Rossini这两个牛人级别差不多:)
https://github.com/stuffmatic/blam

https://github.com/mrossini-ethz/camera-calibration-pvr

点评

感谢感谢!这两个插件做的内容与我们完全重合,用几何理论解释透视和投影,blam这位大牛依靠平行线和直角解算相机位置,另一位大牛则解算出了相机的焦距、位置、旋转等参数,也就是对极几何中称作的“内部参数”和“  详情 回复 发表于 2017-4-27 09:19
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-4-27 09:19:51 | 显示全部楼层
nirenyang 发表于 2017-4-26 20:44
估计楼主 和 stuffmatic 、Marco Rossini这两个牛人级别差不多:)
https://github.com/stuffmatic/blam

感谢感谢!这两个插件做的内容与我们完全重合,用几何理论解释透视和投影,blam这位大牛依靠平行线和直角解算相机位置,另一位大牛则解算出了相机的焦距、位置、旋转等参数,也就是对极几何中称作的“内部参数”和“外部参数”。这两个插件对我们的工程有非常大的参考意义,非常感谢!

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

Blender最新中文教学视频|Blender头条|小黑屋|手机版|Archiver|Blender中国 ( 蜀ICP备17002929号 )360网站安全检测平台

GMT+8, 2019-10-20 04:39 , Processed in 0.021147 second(s), 21 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表