我有一个简单的二维引擎,可以渲染二维纹理的四边形,现在我可以缩放或旋转四边形,但当我试图转换它时,我有一个奇怪的失真(四边形被挤压在屏幕的左半部分,具有无限的透视效果),下面是代码:
private final float quad_vertex[] = {
-0.5f, 0.5f, 0.0f, // top left
-0.5f, -0.5f, 0.0f, // bottom left
0.5f, -0.5f, 0.0f, // bottom right
0.5f, 0.5f, 0.0f // top right
};
final float left = -width/2.0f;
final float right = width/2.0f;
final float bottom = -height/2.0f;
final float top = height/2.0f;
final float near = 0.1f;
final float far = 200.0f;
Matrix.orthoM(projection_matrix, 0, left, right, top, bottom, near, far);
Matrix.setLookAtM(view_matrix, 0, 0, 0, 1.0f, 0.0f, 0f, 0f, 0f, 1.0f, 0.0f);
…
Matrix.setIdentityM(model_matrix, 0);
Matrix.scaleM(model_matrix, 0, scale_width, scale_height, 1.0f);
Matrix.translateM(model_matrix, 0, x, 0, 0);
//Matrix.rotateM(model_matrix, 0, x, 1, 0, 0);
x = x + 1.0f;
Matrix.multiplyMM(viewprojection_matrix, 0, projection_matrix, 0, view_matrix, 0);
Matrix.multiplyMM(modelviewprojection_matrix, 0, viewprojection_matrix, 0, model_matrix, 0);
那么,知道有什么问题吗?提前谢谢:)
最佳答案
听起来像是我遇到的一个类似的问题。我在http://developer.android.com/training/graphics/opengl/index.html使用教程代码。将着色器代码中的一行从gl_Position = vPosition * uMVPMatrix;
更改为gl_Position = uMVPMatrix * vPosition;
解决了该问题。
矩阵乘法是一种非交换运算-运算数的顺序很重要!