文件构成
- Lib
- libOmniProCam
- libOmniProCamCalibration
- OmniProcam
- Projection
- Camera
- ProjectionTarget
- RenderTexture
- Shader
- DebugUI
- LibOmniProCamManager
- Projection
其中,在lib里面有calibration用的接口,在里面设定好了投影仪需要的参数数量和相机需要的参数数量。在lib里面直接放了老师写好的dll,所以其实cs文件是在访问这些dll的内容
Camera
- 目的:初始化相机
变量
- 创建一个class:cameraInitializer,继承了Monobehaviour
- MonoBehaviour是每一个unity的script的基础类
- public的gameobject,用来决定setup哪个相机,这个相机直接从unity的UI里面拽进去
- protected的camera类,targetcamera
- projected可以在这个class以及所有继承这个class的里面被访问,但是private只能在这个class中被访问
- Camera是unity里面一个表示相机的类
- 创建了两个float的数组,大小和之前设置好的相机参数,和投影仪参数一样
- 初始化三个4x4的矩阵,分别是相机的intrinsic,extrinsic以及相机的投影矩阵
- Matrix4x4可以表示transformation的矩阵,包括平移旋转等等
函数
- void Awake()
- 功能
- 在开始之前初始化variable或者game state,在整个stript里面只被call一次
- 在所有的object初始化结束之后
- 通常在start之前被call
- 效果
- 初始化了calibration
- 设定好了目标的相机,并且把这个相机setup
- 功能
- protected void setupCamera(Camera targetCamera, int cameraIndex)
- 直接call了dll里面写好的功能(但是这里得到的是projector的,为什么?),得到了各种参数
- 关于GChandle
- 然后把distortion和都记录下来了,直接把translation和rotation(相机的外矩阵)赋值给了目标相机、这样目标相机就能直接移动到应该到的位置上了
- 另外两个函数可以返回这里目前没有用到的distortion k(4个)和c(2个)