如何在OpenGLES 2.0中翻译和缩放对象

时间:2013-12-23 21:03:43

标签: java android opengl-es

我可以使用下面的代码来使用OpenGLES缩放和平移正方形。但我不确定如何计算翻译和比例因子。例如,使用下面的OpenGL坐标系图片和Matrix.translateM(mViewMatrix, 0, .5f, 0, 0);,我希望广场在屏幕右侧的中间绘制,而是从中心向左侧绘制。但是Matrix.translateM(mViewMatrix, 0, 0, .5f, 0);确实将屏幕中间的正方形从中心转换。

我如何翻译和缩放以便以编程方式将N正方形并排水平填充到屏幕顶部?

OpenGLES coordinate system

@Override
public void onDrawFrame(GL10 unused) {

    // Draw background color
    GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT | GLES20.GL_DEPTH_BUFFER_BIT);

    // Set the camera position (View matrix)
    Matrix.setLookAtM(mViewMatrix, 0, 0, 0, -3, 0f, 0f, 0f, 0f, 1.0f, 0.0f);

    // Translate by some amount
    // Matrix.translateM(mViewMatrix, 0, ?, ?, 0);

    // Scale by some amount
    // Matrix.scaleM(mViewMatrix, 0, ?, ?, 1);

    // Calculate the projection and view transformation
    Matrix.multiplyMM(mMVPMatrix, 0, mProjectionMatrix, 0, mViewMatrix, 0);

    // Draw square
    mSquare.draw(mMVPMatrix);
}

1 个答案:

答案 0 :(得分:0)

我不确定为什么你需要翻译和缩放来填充一排方格。要在openGL ES中以编程方式获取正方形行,我只需要将一堆正方形初始化为您想要的位置。我的一个项目的编辑片段是这样的:

public void onSurfaceCreated(GL10 unused, EGLConfig config){
   GLES20.glClearColor(bgr, bgg, bgb, bga);
   float z=0.0f;
   float y=0.0f;
   for(float i=(-worldwidth);i<worldwidth;i+=(cellwidth)){
      square=new Square(i,y,z);     
      cellvec.addElement(square);
   }
}
public void onDrawFrame(GL10 unused) {
    GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT | GLES20.GL_DEPTH_BUFFER_BIT);
    Matrix.setLookAtM(mViewMatrix, 0, 0, 0, -3, 0f, 0f, 0f, 0f, 1.0f, 0.0f);
    Matrix.multiplyMM(mMVPMatrix, 0, mProjectionMatrix, 0, mViewMatrix, 0);
    for(int i=0;i<cellvec.size();i++){
        cellvec.elementAt(i).draw(mMVPMatrix);
    }
}

我不完全确定这样的东西是不是你想要的东西,但它似乎得到了你想要的一排方格的结果。