Android Opengl仅移动背景项

Android Opengl仅移动背景项,android,opengl-es,Android,Opengl Es,我用opengl制作了一个简单的界面(它是左右的,只需按一下按钮) 我把它们放在屏幕的底部 它们是由opengl制作的(jsut是由两个三角形组成的一个长方体) 我想将屏幕向左或向右移动。 所以在onDraw方法中,我使用这个代码 @Override public void onDrawFrame(GL10 gl) { gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT); gl.

我用opengl制作了一个简单的界面(它是左右的,只需按一下按钮) 我把它们放在屏幕的底部

它们是由opengl制作的(jsut是由两个三角形组成的一个长方体)

我想将屏幕向左或向右移动。 所以在onDraw方法中,我使用这个代码

 @Override
    public void onDrawFrame(GL10 gl) {
        gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
        gl.glEnable(GL10.GL_BLEND);
        gl.glBlendFunc(GL10.GL_SRC_ALPHA, GL10.GL_ONE_MINUS_SRC_ALPHA);
        gl.glClearColor(0, 0.5f, 0.5f, 0);
        gl.glMatrixMode(GL10.GL_PROJECTION);
        gl.glLoadIdentity();

        gl.glOrthof(0, glWidth, glHeight, 0, 0, 1);
        // ==================================================================================================
        gameField.drawGameField(gl);
        drawInterface(gl);
     }
public void draw(GL10 gl)
    {      gl.glMatrixMode(GL10.GL_MODELVIEW);
           gl.glLoadIdentity();  
           gl.glTranslatef(0 , 0 , 0); //
           gl.glBindTexture(GL10.GL_TEXTURE_2D, textures[0]);
           gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
           gl.glEnableClientState(GL10.GL_TEXTURE_COORD_ARRAY);
           gl.glFrontFace(GL10.GL_CW);
           gl.glTexCoordPointer(2, GL10.GL_FLOAT, 0, textureBuffer);
           gl.glVertexPointer( 2, GL10.GL_FLOAT, 0, vertices);
           gl.glDrawElements(GL10.GL_TRIANGLE_STRIP, 6, GL10.GL_UNSIGNED_SHORT, indices);
           gl.glEnable(GL10.GL_TEXTURE_2D);
           gl.glDisableClientState(GL10.GL_TEXTURE_COORD_ARRAY);
     }
使用此代码从界面或游戏场im绘制对象

 @Override
    public void onDrawFrame(GL10 gl) {
        gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
        gl.glEnable(GL10.GL_BLEND);
        gl.glBlendFunc(GL10.GL_SRC_ALPHA, GL10.GL_ONE_MINUS_SRC_ALPHA);
        gl.glClearColor(0, 0.5f, 0.5f, 0);
        gl.glMatrixMode(GL10.GL_PROJECTION);
        gl.glLoadIdentity();

        gl.glOrthof(0, glWidth, glHeight, 0, 0, 1);
        // ==================================================================================================
        gameField.drawGameField(gl);
        drawInterface(gl);
     }
public void draw(GL10 gl)
    {      gl.glMatrixMode(GL10.GL_MODELVIEW);
           gl.glLoadIdentity();  
           gl.glTranslatef(0 , 0 , 0); //
           gl.glBindTexture(GL10.GL_TEXTURE_2D, textures[0]);
           gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
           gl.glEnableClientState(GL10.GL_TEXTURE_COORD_ARRAY);
           gl.glFrontFace(GL10.GL_CW);
           gl.glTexCoordPointer(2, GL10.GL_FLOAT, 0, textureBuffer);
           gl.glVertexPointer( 2, GL10.GL_FLOAT, 0, vertices);
           gl.glDrawElements(GL10.GL_TRIANGLE_STRIP, 6, GL10.GL_UNSIGNED_SHORT, indices);
           gl.glEnable(GL10.GL_TEXTURE_2D);
           gl.glDisableClientState(GL10.GL_TEXTURE_COORD_ARRAY);
     }
如何创建项目。Interface leftButton=新接口(); 而在onDrawFrame中,我只需调用leftButton.draw(gl)

作为背景,我制作了另一个类,其中im从游戏中绘制所有对象(不是界面)

简单代码

public void drawGameField(GL10 gl) {
        gl.glTranslatef(moveWidth, moveHeight, -1);
        background.draw(gl);
        yama.draw(gl);
    }
那么问题出在哪里,正如我们在上一个函数(drawGameField)中看到的,我设置了gl.glTranslatef(moveWidth,moveHeight,-1)

在onDrawFrame中,我称之为func,它的工作非常完美。我的游戏屏幕向左或向右移动(就像一个大的2d地图,我想滚动),但问题是我的界面按钮太向左或向右移动,我不知道如何解决这个问题。也许有人知道怎么解决这个问题

UPD 如果在gameField.draw之前设置glTranslatef

gl.glTranslatef(moveWidth,moveHeight,0);
gameField.drawGameField(gl);
        drawInterface(gl);
比所有在屏幕上移动

如果设定在

gameField.drawGameField(gl);
gl.glTranslatef(moveWidth,moveHeight,0);
drawInterface(gl);

如果我更改了位置(第一个drawInterface而不是gameField),那么translatef也不工作(

可能,在绘制UI之前,您没有重置/更新MODELVIEW矩阵。尝试调用gl.glLoadIdentity();在drawInterface(gl)之前