Android OpenGL ES 2.0正交坐标 我试图从OpenGL C++到OpenGL ES 2,我不太确定矩阵是如何工作的。br/> 之前,我使用glOrtho在projectionView中设置了一个网格,原点在中心,类似这样:(y比率通常为1)

Android OpenGL ES 2.0正交坐标 我试图从OpenGL C++到OpenGL ES 2,我不太确定矩阵是如何工作的。br/> 之前,我使用glOrtho在projectionView中设置了一个网格,原点在中心,类似这样:(y比率通常为1),android,matrix,opengl-es-2.0,Android,Matrix,Opengl Es 2.0,进入安卓系统后,我尝试做同样的事情,但似乎坐标平面设置不正确。坐标平面在两个轴上的范围似乎都在-1到1之间。x轴应为-比-比。以下是我试图在onSurfaceChanged()函数中执行的操作: Matrix.setIdentityM(mtrxProjection, 0); Matrix.setIdentityM(mtrxView, 0); Matrix.setIdentityM(mtrxProjectionAndView, 0); Matrix.orthoM(mtrxProjection,

进入安卓系统后,我尝试做同样的事情,但似乎坐标平面设置不正确。坐标平面在两个轴上的范围似乎都在-1到1之间。x轴应为-比-比。以下是我试图在onSurfaceChanged()函数中执行的操作:

Matrix.setIdentityM(mtrxProjection, 0);
Matrix.setIdentityM(mtrxView, 0);
Matrix.setIdentityM(mtrxProjectionAndView, 0);

Matrix.orthoM(mtrxProjection, 0, -ratio, ratio, -1.0f, 1.0f, 0, 50);

Matrix.setLookAtM(mtrxView, 0, 0f, 0f, 1f, 0, 0, 0f, 0f, 1.0f, 0.0f);

Matrix.multiplyMM(mtrxProjectionAndView, 0, mtrxProjection, 0, mtrxView, 0);
onDrawFrame,清除、重置矩阵并绘制实体:

GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT | GLES20.GL_DEPTH_BUFFER_BIT);
Matrix.setIdentityM(mtrxProjectionAndView, 0);
Matrix.multiplyMM(mtrxProjectionAndView, 0, mtrxProjection, 0, mtrxView, 0);
//draw entities here
以下是我如何为每个实体设置矩阵(为每个渲染调用构建):


更新:矩阵乘法的运算顺序搞砸了,在最后一行:

Matrix.multiplyMM(GLRenderer.mtrxProjectionAndView, 0,
GLRenderer.mtrxProjection, 0, GLRenderer.mtrxProjectionAndView, 0);

您发布的代码中的主要问题是您从未使用您计算的矩阵。如果这样做了更改,我想您一定是在未显示的代码中的某个地方应用了它们?它是通过着色器应用的:
int mtrxhandle=GLES20.glGetUniformLocation(riGraphicTools.sp_Image,“uMVPMatrix”)
GLES20.glUniformMatrix4fv(mtrxhandle,1,false,GLRenderer.mtrxProjectionAndView,0)
float[] scaleMatrix = new float[16];
scaleMatrix[0] = scale.x;
scaleMatrix[5] = scale.y;
scaleMatrix[10] = scale.z;
scaleMatrix[15] = 1;

translateMatrix[12] = position.x;
translateMatrix[13] = position.y;
translateMatrix[14] = position.z;

float[] rotationXMatrix = new float[16];
float[] rotationYMatrix = new float[16];
float[] rotationZMatrix = new float[16];

Matrix.setIdentityM(matrix, 0);
Matrix.multiplyMM(matrix, 0, scaleMatrix, 0, matrix, 0);
Matrix.setRotateM(rotationXMatrix, 0, rotation.x, 1, 0, 0);
Matrix.setRotateM(rotationYMatrix, 0, rotation.y, 0, 1, 0);
Matrix.setRotateM(rotationZMatrix, 0, rotation.z, 0, 0, 1);
Matrix.multiplyMM(matrix, 0, rotationXMatrix, 0, matrix, 0);
Matrix.multiplyMM(matrix, 0, rotationYMatrix, 0, matrix, 0);
Matrix.multiplyMM(matrix, 0, rotationZMatrix, 0, matrix, 0);
Matrix.multiplyMM(matrix, 0, translateMatrix, 0, matrix, 0);

Matrix.multiplyMM(GLRenderer.mtrxProjectionAndView, 0, GLRenderer.mtrxView, 0, matrix, 0);
Matrix.multiplyMM(GLRenderer.mtrxProjectionAndView, 0, GLRenderer.mtrxProjectionAndView, 0, GLRenderer.mtrxProjection, 0);
Matrix.multiplyMM(GLRenderer.mtrxProjectionAndView, 0,
GLRenderer.mtrxProjection, 0, GLRenderer.mtrxProjectionAndView, 0);