Opengles图像在沿Z轴旋转纹理时发生扭曲

4
你好,我正在开发一个基于OpenGLES的Android应用程序,我需要实时在z轴上旋转纹理。但是,当我将旋转添加到模型矩阵时,图像会扭曲。
下面的第一幅图像是原始图像,第二幅图像是在z轴旋转后扭曲的图像。

enter image description here

enter image description here

这是我的着色器:

private final String mVertexShader = "" +
        "attribute vec4 position;\n" +
        "attribute vec2 textureCoordinate;\n" +
        "varying vec2 textureCoordinateVarying;\n" +
        "uniform mat4 modelMat;\n" +
        "uniform mat4 viewMat;\n" +
        "uniform mat4 projectionMat;\n" +
        "" +
        "void main() {\n" +
        "    gl_Position = projectionMat * viewMat * modelMat*position ;\n" +
        "    textureCoordinateVarying = textureCoordinate;\n" +
        "}";
private final String mFragmentShader = "precision highp float;\n" +
        "uniform sampler2D textureBackground;\n" +
        "uniform sampler2D textureNumbers;" +
        "varying highp vec2 textureCoordinateVarying;\n" +
        "void main() {\n" +
        "    vec4 background = texture2D(textureBackground, textureCoordinateVarying);" +
        "    vec4 foreground = texture2D(textureNumbers, textureCoordinateVarying);" +
        "    gl_FragColor = mix(background, foreground, 0.2);\n" +
        "}\n";

关于投影、视图和模型矩阵,以下是它们的初始化函数:

    Matrix.setIdentityM(model, 0);
    Matrix.setIdentityM(rotation, 0);
    Matrix.setIdentityM(view, 0);
    Matrix.setIdentityM(projection, 0);

    Matrix.translateM(view, 0,0,0,-3.0f);
    Matrix.perspectiveM(projection,0,45,(float)mBackground.getHeight()/(float)mBackground.getWidth(), 0.1f, 100f);

在onDraw函数中,我将更新模型矩阵的值;

public void onDrawFrame(GL10 gl) {
    //some function

    //update model matrix, and rotation is just a 4*4 identity matrix, and the degree is the z-axis rotation degree.
    Matrix.setRotateM(rotation, 0, degree, 0, 0, 1);
    Matrix.multiplyMM(model, 0, rotation, 0, model, 0);
    Matrix.setIdentityM(rotation,0);

    //draw my texture
}

我现在非常绝望,非常感谢任何帮助。
1个回答

0

看来我必须自己解决这个问题,实际上我只是犯了一个愚蠢的错误,投影矩阵的比率应该是表面视图的宽度除以相同表面视图的高度,而不应该是你的纹理图像宽度/高度的比率。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接