2012-07-23 61 views
3

我有一个简单的2D引擎,可以渲染2D纹理的四边形,现在我可以缩放四边形或旋转它,但是当我尝试翻译它时,我有一个奇怪的失真四是在屏幕的具有无限透视效果左半部分压扁),这里是代码:2D Quads:在Android上使用OpenGL ES 2.0进行翻译

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); 

因此,任何想法是什么问题?在此先感谢:)

+0

对于它的价值,任何发布的代码都没有出现任何问题。你的问题可能在其他地方。此外,该问题的屏幕截图可能会有所帮助。 – Tim 2012-07-24 00:16:36

+0

确实,问题出在顶点着色器上,上面的代码是正确的,谢谢。 – user1546493 2012-07-24 15:26:26

回答

2

听起来像我碰到类似的问题。我正在使用教程代码http://developer.android.com/training/graphics/opengl/index.html。将着色器代码中的一行从gl_Position = vPosition * uMVPMatrix;更改为gl_Position = uMVPMatrix * vPosition;可解决该问题。

矩阵乘法是一种非交换操作 - 操作数的顺序很重要!