0

Я хочу повернуть объекты, обработанные из файла .obj в min3d. Мне нужно использовать матрицу вращения, полученную от датчиков. Я знаю, как это сделать в чистом OpenGL, но я не могу понять, что использовать (возможно, min3d.core.Renderer?) И как в min3d.
Мне нравится min3d, и он разбирает файлы .obj очень красиво, поэтому я действительно не хочу отказаться от него и использовать чистый openGL. Я знаю, что могу использовать метод rotate(), но он использует углы Эйлера, и мне нужно использовать матрицу вращения. Вот код:Как использовать матрицу вращения датчиков в min3d для поворота анализируемого объекта

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 but rotation() method has to use 
    * eulers angles (X/Y/Z euler rotation of object, using Euler angles. 
    * Units should be in degrees, to match OpenGL usage)which is no use for me 
    * as i need to 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(); 
     } 
} 
} 

ответ

0

Я думаю, вы должны рассчитать угол из вашей матрицы вращения и установить его в updateScene(), как это: obj.rotation() х =.? obj.rotation(). Y =? obj.rotation(). Z =?