Я хочу, чтобы датчики Android работали с opengl, чтобы повернуть камеру opengl в любую точку, на которую указывает телефон.Android-датчики для OpenGL
Чтобы уточнить: если игрок смотрит на восток, я бы хотел, чтобы точки камеры opengl находились на востоке тоже по игре; если игрок указывает на небо, я хотел бы указать камеру opengl на небо и так далее.
Я пробовал использовать getRotationMatrix
и загружать матрицу на opengl, но он работает только в направлении вверх-вниз, если я поворачиваю ячейку по бокам, нет никакой разницы. Вот то, что я сделал до сих пор (приложение находится в ландшафтном режиме):
public void onSensorChanged(SensorEvent evt) {
int type=evt.sensor.getType();
float alpha = 0.8f;
//Smoothing the sensor data a bit
if (type == Sensor.TYPE_MAGNETIC_FIELD) {
geomag[0]=geomag[0]*alpha+evt.values[0]*(1-alpha);
geomag[1]=geomag[1]*alpha+evt.values[1]*(1-alpha);
geomag[2]=geomag[2]*alpha+evt.values[2]*(1-alpha);
} else if (type == Sensor.TYPE_ACCELEROMETER) {
gravity[0]= gravity[0]*alpha+evt.values[0]*(1-alpha);
gravity[1]= gravity[1]*alpha+evt.values[1]*(1-alpha);
gravity[2]= gravity[2]*alpha+evt.values[2]*(1-alpha);
}
if ((type==Sensor.TYPE_MAGNETIC_FIELD) || (type==Sensor.TYPE_ACCELEROMETER)) {
rotationMatrix = new float[16];
SensorManager.getRotationMatrix(rotationMatrix, null, gravity, geomag);
SensorManager.remapCoordinateSystem(
rotationMatrix,
SensorManager.AXIS_Y,
SensorManager.AXIS_MINUS_X,
rotationMatrix);
if (AOGLRenderer.rotationmatrix==null) AOGLRenderer.rotationmatrix = new float[16];
AOGLRenderer.rotationmatrix = rotationMatrix;
}
}
и в коде OPENGL:
gl.glClear(GL10.GL_COLOR_BUFFER_BIT | // OpenGL docs.
GL10.GL_DEPTH_BUFFER_BIT);
gl.glLoadIdentity();
if (rotationmatrix!=null) gl.glLoadMatrixf(rotationmatrix, 0);
gl.glPushMatrix();
gl.glTranslatef(0, 0, -70);
g.draw(gl);
gl.glPopMatrix();
alpha+=2f;
gl.glTranslatef(0, -15, 0);
c.draw(gl);
Я хотел бы, что кто-то, кто на самом деле он мог поделиться их код! Я бы очень признателен! Спасибо вам всем!
Спасибо за ответ! но на самом деле не получилось. То, что я имел в виду, - это сделать то же самое, что показано в этом видео: http://www.youtube.com/watch?v=wfRjZrnPBXY – rdnobrega