Android Opengl仅移动背景项
我用opengl制作了一个简单的界面(它是左右的,只需按一下按钮) 我把它们放在屏幕的底部 它们是由opengl制作的(jsut是由两个三角形组成的一个长方体) 我想将屏幕向左或向右移动。 所以在onDraw方法中,我使用这个代码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.
@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)之前