android - GVR MonoscopeView 中的中心摄像头
问题描述
我正在使用 GVR Android 库版本 1.190 并尝试在 video360 示例项目中播放 360 度和 180 度视频。在这两种情况下,2D 视图 (MonoscopeView) 都可以正常开始播放,但查看器的摄像头位置永远不会以视频的中心为中心。相反,它开始随机偏离水平轴的中心。在多个设备上的行为相同。任何人都知道如何在 2D 视图开始时将视图居中到视频中心?
解决方案
事实证明,每次我的活动注册一个监听器时,来自 Sensor.TYPE_GAME_ROTATION_VECTOR 的传感器数据都有非常不同的值(角度)。只需稍微倾斜手机即可获得真正不同的值。不同的设备也有不同的响应,但它们都有偏移读数。这导致初始视角(通常)位于视频中心向左或向右 90 度。多亏了这篇文章,我设法计算了初始航向偏移并旋转了手机位置矩阵以进行补偿。
添加一个private float initialHeading
初始值为0的成员变量。然后,在PhoneOrientationListener的onSensorChanged中,在Android到OpenGL矩阵旋转之后添加如下代码:
if (initialHeading == 0) {
initialHeading = (float) ((angles[0] + 2 * Math.PI) % (2 * Math.PI));
}
float angle = (float) ((Math.PI - initialHeading) * 180 / Math.PI);
Matrix.rotateM(phoneInWorldSpaceMatrix, 0, angle, 0, 1, 0);
推荐阅读
- javascript - 尝试在父组件之前将 ref 数据传递给组件的 prop
- reactjs - gatsby build → WebpackError: TypeError: Cannot read property 'GoogleAuthProvider' of undefined
- sql-server - SQL INFORMATION_SCHEMA.VIEWS
- c# - UWP C# Windows.Web.HttpClient 内存泄漏
- java - 如何在 Kotlin 的 viewPager 中添加动画?
- javascript - JavaScript 网格复制为字符串
- javascript - 如何记住溢出的滚动位置:滚动div?
- windows - WIN 10 PostgreSQL DB symbols are unreadable
- python - python 3.5 on Ubuntu 16.04 has dict syntax error for installed ackage?
- python - Save an image or several files what my telegram bot gets, to a specific directory