android - How to use sensors rotation matrix in min3d to rotate parsed object -
i want rotate objects parsed .obj file in min3d. need use rotation matrix got sensors. know how in pure opengl can't figure out use (min3d.core.renderer probably?) , how in min3d.
min3d , parses .obj files nicely don't want abandon , use pure opengl. know can use rotate() method uses eulers angles , need use rotation matrix. here's code:
public class hurleyloading extends rendereractivity implements sensoreventlistener{ private object3dcontainer hurleymodel; private sensormanager sensormanager; private sensor sensoracc; private sensor sensormagnetic; private float[] acceldata = new float[3]; private float[] magnetdata = new float[3]; private final float[] rotationmatrix = new float[16]; float[] orientation = new float[3]; @override public void oncreate(bundle b){ super.oncreate(b); setrequestedorientation(activityinfo.screen_orientation_portrait); sensormanager = (sensormanager)getsystemservice(sensor_service); sensoracc = sensormanager.getdefaultsensor(sensor.type_accelerometer); sensormagnetic = sensormanager.getdefaultsensor(sensor.type_magnetic_field); } public void onresume() { super.onresume(); sensormanager.registerlistener(this, sensoracc, sensormanager.sensor_delay_game); sensormanager.registerlistener(this, sensormagnetic, sensormanager.sensor_delay_game); } public void onstart() { super.onstart(); sensormanager.registerlistener(this, sensoracc, sensormanager.sensor_delay_game); sensormanager.registerlistener(this, sensormagnetic, sensormanager.sensor_delay_game); //this.onresume(); } public void onpause() { super.onpause(); sensormanager.unregisterlistener(this); } @override public void initscene() { scene.lights().add(new light()); scene.lights().add(new light()); scene.lights().add(new light()); scene.lights().add(new light()); scene.lights().add(new light()); scene.lights().add(new light()); scene.lights().add(new light()); iparser parser = parser.createparser(parser.type.obj, getresources(), "ie.tyndall.hurleyopengl:raw/hurley_obj", true); parser.parse(); hurleymodel = parser.getparsedobject(); hurleymodel.scale().x = hurleymodel.scale().y = hurleymodel.scale().z = 1.4f; hurleymodel.position().y = -1.8f; hurleymodel.position().x = .4f; scene.addchild(hurleymodel); } @override public void updatescene() { /**some rotation code can go here rotation() method has use * eulers angles (x/y/z euler rotation of object, using euler angles. * units should in degrees, match opengl usage)which no use me * need use rotation matrix **/ } //@override public void onaccuracychanged(sensor arg0, int arg1) { // todo auto-generated method stub } @override public void onsensorchanged(sensorevent event) { loadsensordata(event); sensormanager.getrotationmatrix(rotationmatrix, null, acceldata, magnetdata); } private void loadsensordata(sensorevent event) { final int type = event.sensor.gettype(); if (type == sensor.type_accelerometer) { acceldata = event.values.clone(); } if (type == sensor.type_magnetic_field) { magnetdata = event.values.clone(); } } }
i think have calculate angle rotation matrix , set in updatescene() this: obj.rotation().x = ? obj.rotation().y = ? obj.rotation().z = ?
Comments
Post a Comment