打开gl ES 2正交投影和旋转

时间:2013-11-27 08:09:16

标签: android opengl-es rotation 2d

我的轮换工作正常:

    public void onDrawFrame(GL10 unused) {
    float[] scratch = new float[16];
    GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT | GLES20.GL_DEPTH_BUFFER_BIT);
    Matrix.setLookAtM(mViewMatrix, 0, 0f ,0f, -3f, 0f, 0f, 0f, 0f, 1.0f, 0.0f);
    Matrix.multiplyMM(mMVPMatrix, 0, mProjectionMatrix, 0, mViewMatrix, 0);
    Matrix.setRotateM(mRotationMatrix, 0, i, 0, 0, 1.0f);
    Matrix.multiplyMM(scratch, 0, mMVPMatrix, 0, mRotationMatrix, 0);
    mTriangle.draw(scratch);
    }

使用此着色器顶点:

      private final String vertexShaderCode =
        "uniform mat4 uMVPMatrix;" +
        "attribute vec4 vPosition;" +
        "void main() {" +
        "  gl_Position = uMVPMatrix * vPosition;" +
     "}";

但是当我想改变我的0x; 0y坐标位于左上角时这样:

    private final String vertexShaderCode =
        "uniform mat4 uMVPMatrix;" +
        "attribute vec4 vPosition;" +
        "void main() {" +
        "  gl_Position =  vec4 ( vPosition.x *  2.0 / 1280.0 - 1.0," +
        "vPosition.y* - 2.0 / 800.0  + 1.0," +
        "vPosition.z, " +
        "1.0);" +
     "}";*

使用这些顶点:

     static float triangleCoords[] = {
     300.0f,      0.0f, 0.0f,  
     0.0f,        500.0f, 0.0f,   
     1280.0f,     500.0f, 0.0f    
     };

图片:http://i.stack.imgur.com/aRQa9.jpg

我的三角形看起来像我想要但我再也看不到我的旋转了。为了解决我试过很多东西,比如用uMVPMatrix乘以这个,但现在我可以看到旋转,但我总是得到坐标问题,因为它出现在屏幕中间,我的顶点三角形不适合它应该的大小:

图片:http://i.stack.imgur.com/tH02H.png

我的android屏幕分辨率是1280 * 800我只想让这个三角形旋转而不用这种方式进行修改。 有人可以解释一下如何做到这一点。

编辑: 感谢Andon M. Coleman和SAKrisT,我能够将我的原点指向左上方0:0的android坐标。

如果可以提供帮助:

    public void onDrawFrame(GL10 unused) {

    GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT | GLES20.GL_DEPTH_BUFFER_BIT);
    Matrix.orthoM(mProjectionMatrix, 0, left, right, top, bottom, near, far);
    Matrix.setLookAtM(mViewMatrix, 0, 0, 0, 1.0f, 0.0f, 0f, 0f, 0f, 1.0f, 0.0f);
    Matrix.multiplyMM(mMVPMatrix, 0, mProjectionMatrix, 0, mViewMatrix, 0);
    Matrix.setRotateM(mRotationMatrix, 0, 0, 0, 0, 1.0f);
    Matrix.multiplyMM(mProjectionMatrix, 0, mMVPMatrix, 0, mRotationMatrix, 0);

    mTriangle.draw(mProjectionMatrix);
    } 

0 个答案:

没有答案