Note that there are some explanatory texts on larger screens.

plurals
  1. POOpenGL ES 2.0 doesn't draw anything
    text
    copied!<p>I have a problem with OpenGl ES 2.0. I've designed a very simple framework to help me load OBJ files and draw them on my Android phone, but I have 2 bugs that I haven't been able to fix:</p> <ol> <li><p>My app doesn't show anything until I change the orientation and the Activity gets scraped and reloaded. Until it reloads only GLES20.glClear() can be seen(I've set it to a grayish color).</p></li> <li><p>Sometimes when I load an OBJ and do the orientation trick, half of my faces are missing and I see gaps, but the problem might be with the OBJ files I've used.</p></li> </ol> <p><br></p> <pre><code>package com.ideas.opengl; import java.io.IOException; import javax.microedition.khronos.egl.EGLConfig; import javax.microedition.khronos.opengles.GL10; import android.opengl.GLES20; import android.opengl.GLSurfaceView.Renderer; import android.opengl.Matrix; public class DemoRenderer implements Renderer { public static int mProgramHandle; private int mMVPMatrixHandle; private float[] mModelMatrix = new float[16]; private float[] mViewMatrix = new float[16]; private float[] mProjectionMatrix = new float[16]; private float[] mMVPMatrix = new float[16]; public Object banana; private OpenGLDemoActivity activity; private int angle; public DemoRenderer(OpenGLDemoActivity activity) throws IOException { this.activity = activity; } @Override public void onSurfaceCreated(GL10 gl, EGLConfig config){ GLES20.glClearColor(0.65f, 0.65f, 0.65f, 0.65f); //GLES20.glEnable(GLES20.GL_CULL_FACE); GLES20.glEnable(GLES20.GL_DEPTH_TEST); GLES20.glEnable(GLES20.GL_TEXTURE_2D); Shader shader = null; try { shader = new Shader(activity, "simple"); } catch (IOException e) { e.printStackTrace(); } Vector position = new Vector(); Vector speed = new Vector(); Vector accel = new Vector(); Model model = null; try { model = new Model("banana", activity); } catch (IOException e) { e.printStackTrace(); } banana = new Object(position, speed, accel, model); mProgramHandle = shader.getProgramHandle(); final float eyeX = 0.0f; final float eyeY = 0.0f; final float eyeZ = 3.5f; final float lookX = 0.0f; final float lookY = 0.0f; final float lookZ = -5.0f; final float upX = 0.0f; final float upY = 1.0f; final float upZ = 0.0f; Matrix.setLookAtM(mViewMatrix, 0, eyeX, eyeY, eyeZ, lookX, lookY, lookZ, upX, upY, upZ); mMVPMatrixHandle = GLES20.glGetUniformLocation(mProgramHandle, "u_MVPMatrix"); } @Override public void onSurfaceChanged(GL10 gl, int width, int height) { GLES20.glViewport(0, 0, width, height); final float ratio = (float) width / height; final float left = -ratio; final float right = ratio; final float bottom = -1.0f; final float top = 1.0f; final float near = 1.0f; final float far = 10.0f; Matrix.frustumM(mProjectionMatrix, 0, left, right, bottom, top, near, far); } @Override public void onDrawFrame(GL10 gl) { GLES20.glClear(GLES20.GL_DEPTH_BUFFER_BIT | GLES20.GL_COLOR_BUFFER_BIT); angle++; Matrix.setIdentityM(mModelMatrix, 0); Matrix.rotateM(mModelMatrix, 0, angle, 0.0f, 1.0f, 1.0f); Matrix.multiplyMM(mMVPMatrix, 0, mViewMatrix, 0, mModelMatrix, 0); Matrix.multiplyMM(mMVPMatrix, 0, mProjectionMatrix, 0, mMVPMatrix, 0); GLES20.glUniformMatrix4fv(mMVPMatrixHandle, 1, false, mMVPMatrix, 0); banana.draw(); } } </code></pre> <p>`</p>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload