在上一个3D教材演示项目结束后,台北莫名其妙的启动了一个投影仪融合的项目。
之前的3D项目,最开始是使用OpenGL,后来用来Orge引擎,再后来由于主管看到我用u3d,觉得u3d很方便,就改用u3d了。结果这次的投影仪融合项目要使用DirectX,对于从未做过dx项目的我们来说,还是很捉急的。
不过还好,原理通用。
投影仪融合,主要是通过多台投影仪拼接融合成一个大的宽屏的投影效果,融合后相对于普通的投影来说,拥有更高的分辨率和更强的显示效果。我这个项目主要是两台投影仪的应用。
主要应用技术是DirectX + Compute Shader + MFC(UI界面)。
首先,我们通过DX获取输出个数,针对每个输出,设置行列点数和调整纹理坐标映射。
如上图,我们设置的是5 x 5的网格。绿色的网格为边缘融合的宽度。
这个影响到最后显示的效果,根据纹理坐标映射的不同,会显示对应的效果。
接下来,我们通过DXGI获取桌面的贴图,将它拆分为左屏和右屏,分别对应于两台投影仪显示的内容,通过Compute Shader处理融合部分的像素的亮度等。
另外,DXGI获取的桌面图片里面没有鼠标,我们需要通过DXGI获取鼠标贴图进行透明度处理,并绘制在桌面贴图上。
下面是效果:
目前在中间融合地带的亮度处理还有问题,后续将会继续改进中。
文章评论