我希望能够在传感器(陀螺仪)移动后旋转3DForm的相机。
每100毫秒一个计时器启动这个方法:
procedure TForm7.Timer1Timer(Sender: TObject);
begin
if Length(FSensors) > 0 then
if Assigned(FSensors[0]) then
begin
Camera1.RotationAngle.X := OrientationSensor1.Sensor.HeadingX;
Camera1.RotationAngle.Y := OrientationSensor1.Sensor.HeadingY;
Camera1.RotationAngle.Z := OrientationSensor1.Sensor.HeadingZ;
end;
end;
结果不正确,因为智能手机的旋转没有被应用程序中的相机正常跟随(云台锁?)
FireMonkey框架中是否有任何我不知道的方法?
做一些调试,我注意到参数Sensor.HeadingX,HeadingY和HeadingZ的范围从大约-30到+30 ......我的预期值介于0到360之间,或介于0到2之间......
我尝试过(以Embarcadero 为例)使用Sensor.TiltX,TiltY和TiltZ参数,但这些参数总是在Galaxy Note 3和Nexus 4上返回0。
我在Windows 8.1上使用RAD Studio XE7 Professional。
答案 0 :(得分:0)
我在Embarcadero示例中找到了这段代码:
{$IFDEF ANDROID} //In Android, Tilt property is returned as vector
Camera1.RotationAngle.X := FSensor.TiltX * 360;
Camera1.RotationAngle.Y := FSensor.TiltY * 360;
Camera1.RotationAngle.Z := FSensor.TiltZ * 360;
{$ELSE} //In other platforms, Tilt property is returned as degree
Camera1.RotationAngle.X := FSensor.TiltX;
Camera1.RotationAngle.Y := FSensor.TiltY;
Camera1.RotationAngle.Z := FSensor.TiltZ;
{$ENDIF}