这是我的问题:
我有一个带渲染器的GLSurfaceView和东西。在旧的Android版本上,一切都按照我的意愿运行。但是在较新的版本上(我猜是> 4.X)它只显示一个没有任何位图的黑屏。例如,如果我在onSurfaceCreated方法中使用gl.glClearColor(0.1f, 0.2f, 0.3f, 0.5f);
,它会从黑色变为颜色。所以我认为问题必然是相机在错误的方向或类似的东西,因为背景颜色被绘制。
由于我对OpenGL很陌生,我想问一下Android版本与OpenGL相机之间是否存在任何联系?
很多人说我的Bitmap-Sizes必须是2的幂,但它没有解决任何问题。
这是我的渲染器:
public class GlRenderer implements Renderer {
@Override
public void onDrawFrame(GL10 gl) {
// clear Screen Buffer
gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
// Reset the Modelview Matrix
gl.glLoadIdentity();
gl.glTranslatef(0.0f, 0.0f, -5.0f); // move 5 units INTO the screen
// is the same as moving the camera 5 units away
updateLogic(gl);
drawEverything(gl);
}
@Override
public void onSurfaceChanged(GL10 gl, int width, int height) {
gl.glViewport(0, 0, width, height);
gl.glMatrixMode(GL10.GL_PROJECTION); // or some matrix uniform if using shaders
gl.glLoadIdentity();
gl.glOrthof(0, width, height, 0, -1, 1); // this will allow to pass vertices in 'canvas pixel' coordinates
gl.glMatrixMode(GL10.GL_MODELVIEW);
gl.glLoadIdentity();
}
@Override
public void onSurfaceCreated(GL10 gl, EGLConfig config) {
gl.glDisable(GL10.GL_DITHER);
gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT, GL10.GL_FASTEST);
gl.glEnable(GL10.GL_TEXTURE_2D); //Enable Texture Mapping ( NEW )
gl.glShadeModel(GL10.GL_SMOOTH); //Enable Smooth Shading
gl.glClearColor(0.0f, 0.0f, 0.0f, 0.5f); //Set Background
gl.glEnable(GL10.GL_BLEND);
gl.glBlendFunc(GL10.GL_SRC_ALPHA, GL10.GL_ONE_MINUS_SRC_ALPHA);
}
}
答案 0 :(得分:0)
不确定这是否是您遇到的问题,但请尝试更改以下行:
gl.Orthof(0, widht, height, 0, -1, 1);
到
gl.Orthof(0, widht, height, 0, 1, -1);
请注意,near / far值是反转的。有关此疯狂的描述,请参阅this:)