Opengl仅移动背景项

时间:2015-01-13 13:42:46

标签: 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.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);
     }

来自界面的绘图对象或使用此代码的gameField im

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

我如何创建项目。接口leftButton = new Interface(); 比onDrawFrame我只需要调用leftButton.draw(gl);

对于背景我做了其他类我从游戏中绘制所有对象(不是界面)

简单代码

public void drawGameField(GL10 gl) {
        gl.glTranslatef(moveWidth, moveHeight, -1);
        background.draw(gl);
        yama.draw(gl);
    }

所以问题,正如我们在上一个函数(drawGameField)中看到的那样,我设置gl.glTranslatef(moveWidth,moveHeight,-1);

在onDrawFrame中我称之为func,它的工作非常完美。我的游戏画面向左或向右移动(它就像一张我要滚动的大二维地图)但问题是:我的界面按钮也向左或向右移动,我无法理解如何解决这个问题。也许有人知道如何解决这个问题?:(请

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),而不是翻译也不起作用(

1 个答案:

答案 0 :(得分:0)

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