在集成显卡上运行某眼镜

Wed 13 October 2021
By lewix

小黄鱼上入手了某眼镜,这货本质上是一个3200*1600的显示器,左眼对应左半部分逆时针90°,右眼对应右半部分顺时针90°。电脑是Thinkpad T14s Intel版,插上Type C口能被识别出来,网上有人说插雷电口也能用,但我的插上雷电口不认,试了Macbook Air的雷电口也不认。

自带的软件需要显卡支持,电脑是集成显卡跑不起来。想了想,其实只要让左右显示正确的内容应该就可以,于是开始尝试。。

开始想用VLC mosaic功能,理论上应该也行,但duplicate,scale,rotate没搞定。

用ffmpeg搞定了

set w=1200 #缩放后的宽度
set hoffset=50 #上下位置
set woffset=0 #瞳距不合适可以试试调节这个值
ffplay -f gdigrab -framerate 30 -video_size 1920x1080 -i desktop -left 1920 -fs -vf "scale=%w%:-1,split[a][b];[a]rotate='-PI/2:ow=1600:oh=ow',pad='3200:1600:(min(ow/2-iw,%hoffset%)):(oh-ih)/2+%woffset%'[1];[b]rotate='PI/2:ow=1600:oh=ow'[2];[1][2]overlay='(max(1600,W-%hoffset%-w)):(H-h)/2-%woffset%'"

命令的作用是抓取显示器1,然后显示在显示器2。先缩放,再复制成两份,分别旋转,再左右并列显示。 如果想看视频,把'-f gdigrab -framerate 30 -video_size 1920x1080 -i desktop' 替换成 '-i xxx.mp4'就可以了。

想着装个3D游戏开发软件,两个摄像机显示左右眼,demo级别的程序,集显应该能搞定。

于是装上Unity 3D。虽然我的Unity 3D 知识储备为0,但可以学嘛。。 找了书,找了教程,熟悉其基本操作。

放两个Camera,设定rotation,rect使其符合该眼镜的显示方式,安装vlc-unity,使其能播放视频或抓取屏幕,并设定几个按键可以调节屏幕位置和远近等等。

vlc-unity从源代码编译的,遇到的问题比较多,简单记录如下。不差钱的主可以直接从Unity store安装。。

  1. 下载vlc-unity. 下载地址

  2. 下载vlc-4.0,64bit的。集成步骤参考vlc-unity中的get-libvlc-windows.sh。脚本里路径可能不太对,需修改。

  3. 下载LibVLCSharp,用master分支(4.0版本)。nuget下的不行,需要使能Unity宏,自己编译。参考get-libvlcsharp.sh。

  4. 用build.sh编译vlc-unity。

  5. 参考Demos里的MinimalPlayback和ThreeSixty写好播放代码就OK了。

如果build后运行报p_config为NULL的错误,把vlc的plugins目录拷到对应位置。如果Mono切换为IL2CPP出错,输出换个新目录或把原来的目录清空。

至于效果嘛,能用的级别,看视频马马虎虎,看桌面字体太细,不堪用。

下一步,尝试读取眼镜传感器的值,实现动态调整姿态。