Java 如何在OpenGLES 2.0中平移和缩放对象

Java 如何在OpenGLES 2.0中平移和缩放对象,java,android,opengl-es,Java,Android,Opengl Es,我可以使用下面的代码使用OpenGLES缩放和转换正方形。但我不知道如何计算平移和比例因子。例如,使用OpenGL坐标系和Matrix.TranslatemViewMatrix的下图,0,5f,0,0;我希望正方形画在屏幕右侧的一半,但它是从中间画到左侧的一半。然而,矩阵,0,0,5f,0;将正方形从屏幕中央向上平移一半 我将如何平移和缩放,以编程方式并排画N个正方形,水平填充屏幕顶部 @Override public void onDrawFrame(GL10 unused) { /

我可以使用下面的代码使用OpenGLES缩放和转换正方形。但我不知道如何计算平移和比例因子。例如,使用OpenGL坐标系和Matrix.TranslatemViewMatrix的下图,0,5f,0,0;我希望正方形画在屏幕右侧的一半,但它是从中间画到左侧的一半。然而,矩阵,0,0,5f,0;将正方形从屏幕中央向上平移一半

我将如何平移和缩放,以编程方式并排画N个正方形,水平填充屏幕顶部

@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);
}

我不知道为什么需要平移和缩放来填充一排正方形。要在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);
    }
}

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

在眼睛空间,+Z向观众移动。你有eyeZ as-3,所以你实际上是在观察平面的另一边向后看。这就是为什么x轴平移似乎朝着错误的方向移动,而y轴平移却没有。看一看。是的,它可能有点令人困惑……啊,这就解释了问题的这一部分。非常感谢。