【问题标题】:How to rotate texture in opengl Es 2.0 in pixel-level如何在像素级旋转opengl Es 2.0中的纹理
【发布时间】:2014-02-22 16:32:40
【问题描述】:

我正在使用 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 像素

【问题讨论】:

  • 如果您发布您正在绘制的内容的屏幕截图以及您在屏幕上的预期旋转位置,这将有助于理解。
  • 好像是相机旋转而不是纹理

标签: android opengl-es rotation opengl-es-2.0 pixel


【解决方案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);

现在工作:)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-11-08
    • 2014-10-23
    • 1970-01-01
    • 2011-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多