我的增强现实应用程序需要摄像机视图的罗盘方位,并且有很多从传感器管理器获取方向的示例.
然而,我发现结果值取决于手机方向 - 旋转到右侧的景观与旋转到左侧的景观大约相差10度(ROTATION_0和ROTATION_180之间的差异较小,但仍然不同).这种差异足以破坏任何AR效应.
它与校准有关吗?(我不相信我正在做正确的8件事 - 我尝试过在youtube上找到的各种方法).
任何想法为何有区别?我搞砸了旋转矩阵的东西吗?我可以选择将应用程序限制为单一方向,但仍然担心罗盘读数仍然不是很准确(即使过滤后它相当稳定)
public void onSensorChanged(SensorEvent event) {
if (event.accuracy == SensorManager.SENSOR_STATUS_UNRELIABLE) {
return;
}
if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) mGravity = event.values;
if (event.sensor.getType() == Sensor.TYPE_MAGNETIC_FIELD) mGeomagnetic = event.values;
if (mGravity != null && mGeomagnetic != null) {
float[] rotationMatrixA = mRotationMatrixA;
if (SensorManager.getRotationMatrix(rotationMatrixA, null, mGravity, mGeomagnetic)) {
float[] rotationMatrixB = mRotationMatrixB;
Display display = getWindowManager().getDefaultDisplay();
int deviceRot = display.getRotation();
switch (deviceRot)
{
// portrait - normal
case Surface.ROTATION_0: SensorManager.remapCoordinateSystem(rotationMatrixA,
SensorManager.AXIS_X, SensorManager.AXIS_Z,
rotationMatrixB);
break;
// …
Run Code Online (Sandbox Code Playgroud) android orientation augmented-reality android-sensors compass-geolocation
我已经覆盖了新的,以便我可以跟踪内存分配.附加参数,例如__FILE__
,__LINE__
,模块名等在所添加的#define
.
但是,我想将调用对象的地址添加到参数中,以便在查找问题时可以回溯分配.最简单的方法是将"this"添加到这些附加参数(这意味着调用者的地址被传递到我的自定义alloc内容中).
不幸的是,我们的代码中有很多单例,这意味着一堆静态成员函数调用new.编译器会抛出错误C2671: '...' : static member functions do not have 'this' pointers
是否有一种解决方法,我可以在不使用的情况下获取对象的地址this
,这也可以实现它在静态方法中并传递null说?
或者有可能我的#define
新方法会在静态方法中识别并切换到不同的定义吗?
重要的是我不会影响现有的项目代码 - 我不想强迫开发人员使用像staticnew这样的自定义方法,因为它是在静态方法中 - 他们应该继续使用像普通的新内存和这种内存跟踪的东西一切都在后台进行......