我正在使用opengl像素级(2D)
在我遇到轮换之前一切都很好
我尝试了不同的方式而没有尝试
这是我在像素级别工作的矩阵
float[] uScreen =
{
2f/width, 0f, 0f, 0f,
0f, -2f/height, 0f, 0f,
0f, 0f, 0f, 0f,
-1f, 1f, 0f, 1f
};
顶点
String vertexSrc =
"uniform mat4 uScreen;\n" +
"attribute vec2 aPosition;\n" +
"void main() {\n" +
" gl_Position = uScreen * vec4(aPosition.xy, 0.0, 1.0);\n" +
"}";
片段着色器
String fragmentSrc =
"precision mediump float;\n"+
"void main(void)\n" +
"{\n" +
" gl_FragColor = vec4(1, 0, 0, 1);\n" +
"}";
这很好用,我可以毫无问题地在屏幕像素级上绘图。 但我想旋转纹理而不知道如何
现在尝试添加以下内容
long time = SystemClock.uptimeMillis() % 4000L;
float angleX = 0.090f * ((int) time);
float[] axis = { 1.0f,0.0f,0.0f};
Matrix.rotateM(uScreen,0,angleX,axis[0],axis[1],axis[2]);
GLES20.glUniformMatrix4fv(uScreenPos, 1, false, uScreen, 0);
旋转纹理,但是有一个奇怪的行为,一切都在屏幕上旋转0.0左右而不是在其中心
知道如何旋转它吗?
纹理(红色)在您的中心上方旋转超过0 0像素
答案 0 :(得分:1)
我将MVP矩阵乘以旋转矩阵,所以我需要向后移动旋转矩阵并向前移动MVP矩阵
这是解决方案
Matrix.setIdentityM(rotationMat, 0);
Matrix.setRotateM(rotationMat, 0,angleX,1,0,0);
Matrix.translateM(uScreen, 0,sprite.x, sprite.y, 0);
Matrix.translateM(rotationMat, 0,-sprite.x, -sprite.y, 0);
立即工作:)