Существует класс android.opengl.Matrix, который представляет собой набор статических методов, которые делают все, что вам нужно, на поплавке [16], который вы передаете. Я настоятельно рекомендую вам использовать эти функции вместо того, чтобы использовать свои собственные.Вы, вероятно, захотите либо setLookAtM с точкой обзора, рассчитанной по углам вашей камеры (используя sin, потому что вы делаете это в своем коде - я предполагаю, что вы знаете, как это сделать.)
- отредактируйте в ответна новый ответ -
(кстати, вы, вероятно, должны были отредактировать свой первоначальный вопрос - ваш ответ как другой вопрос меня немного смутил)
Хорошо, вот один из способов сделатьЭто.Это не скомпилировано и не проверено.Я решил вместо этого построить матрицу вручную;возможно, это даст немного больше информации о том, что происходит ...
class TomCamera {
// These are our inputs - eye position, and the orientation of the camera.
public float mEyeX, mEyeY, mEyeZ; // position
public float mYaw, mPitch, mRoll; // euler angles.
// this is the outputted matrix to pass to OpenGL.
public float mCameraMatrix[] = new float [16];
// convert inputs to outputs.
public void createMatrix() {
// create a camera matrix (YXZ order is pretty standard)
// you may want to negate some of these constant 1s to match expectations.
Matrix.setRotateM(mCameraMatrix, 0, mYaw, 0, 1, 0);
Matrix.rotateM(mCameraMatrix, 0, mPitch, 1, 0, 0);
Matrix.rotateM(mCameraMatrix, 0, mRoll, 0, 0, 1);
Matrix.translateM(mCameraMatrix, 0, -mEyeX, -mEyeY, -mEyeZ);
}
}