0

Итак, я создаю приложение для Android с OpenGL ES 1.0. Моя проблема в том, что объекты, которые нарисованы с использованием GL_TRIANGLES, не отображаются на Android 3.x и 4.x, но все отлично работает на 2.x. Есть ли что-нибудь, что нужно включить или отключить раньше? OpenGL ES 1.0 GL_TRIANGLES, работающий на Android 2.3, но не на 3.x/4.x

Файл с GL_TRIANGLES (Model.java):

public class Model() { 

private FloatBuffer vertexBuffer; 
private ByteBuffer indexBuffer; 
private FloatBuffer colorBuffer; 
byte indices[] = {0, 1, 2}; 
float vertices[]; 
float colors[] = {1.0f, 1.0f, 1.0f, 1.0f}; 

public load(int resid, Context context) { 
    ModelLoader.load(context, resid); 
    vertices = ModelLoader.vertices(); 
    colors = ModelLoader.colors(); 
    ByteBuffer vbb = ByteBuffer.allocateDirect(vertices.length * 4); 
    vbb.order(ByteOrder.nativeOrder()); 
    vertexBuffer = vbb.asFloatBuffer(); 
    vertexBuffer.put(vertices); 
    vertexBuffer.position(0); 
    ByteBuffer cbb = ByteBuffer.allocateDirect(colors.length * 4); 
    cbb.order(ByteOrder.nativeOrder()); 
    colorBuffer = cbb.asFloatBuffer(); 
    colorBuffer.put(colors); 
    colorBuffer.position(0); 
    indexBuffer = ByteBuffer.allocateDirect(indices.length); 
    indexBuffer.put(indices); 
    indexBuffer.position(0); 
} 

public void draw(GL10 gl) { 
    gl.glEnableClientState(GL10.GL_VERTEX_ARRAY); 
    gl.glVertexPointer(3, GL10.GL_FLOAT, 0, vertexBuffer); 
    gl.glEnableClientState(GL10.GL_COLOR_ARRAY); 
    gl.glDrawArrays(GL10.GL_TRIANGLES, 0, vertices.length/3); 
    gl.glDisableClientState(GL10.GL_VERTEX_ARRAY); 
    gl.glDisableClientState(GL10.GL_COLOR_ARRAY); 
} 

} 

Файл с визуализации (GLRender.java):

public class GLRender extends GLSurfaceView.Renderer { 

    public Model sample = new Model(); 
    public void onSurfaceChanged(GL10 gl, int w, int h) { 
    if(h==0) h=1; 
    float aspect = (float)w/h; 
    gl.glViewport(0, 0, w, h); 
    gl.glMatrixMode(GL10.GL_PROJECTION); 
    gl.glLoadIdentity(); 
    GLU.gluPerspective(gl, 45, aspect, 0.1f, 100.0f); 
    gl.glMatrixMode(GL10.GL_MODELVIEW); 
    gl.glLoadIdentity(); 
} 

public void onSurfaceCreated(GL10 gl, EGLConfig glc) { 
    gl.glClearColor(0, 0, 0, 1.0f); 
    gl.glClearDepthf(1.0f); 
    gl.glEnable(GL10.GL_DEPTH_TEST); 
    gl.glDisable(GL10.GL_CULL_FACE); 
    gl.glDepthFunc(GL10.GL_LEQUAL); 
    gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT, GL10.GL_NICEST); 
    gl.glShadeModel(GL10.GL_SMOOTH); 
    gl.glDisable(GL10.GL_DITHER); 
      gl.glEnable(GL10.GL_LIGHTING); 
    gl.glEnable(GL10.GL_LIGHT0); 

    gl.glEnable(GL10.GL_COLOR_MATERIAL); 
    gl.glEnable(GL10.GL_TEXTURE_2D); 
    gl.glEnable(GL10.GL_BLEND);} 

public void onDrawFrame(GL10 gl) { 
gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT); 
gl.glLoadIdentity();    // Reset model-view matrix (NEW) 
gl.glMatrixMode(GL10.GL_MODELVIEW); 
gl.glPushMatrix(); 
sample.draw(gl); 
gl.glPopMatrix(); 
} 
} 

Я думаю, что это достаточно. Приведенный выше код не является проблемой. Он работает (по крайней мере, на сотах).

+0

поднимите свой код, что облегчит людям выявление проблемы – JRowan

+0

@JRowan Я попытался удалить все функции глубины, но ничего не произошло. – pfoof

+0

Да, это не относится к вам, я просто вижу ваш код, честно говоря, я как бы зацикленный, обычно, если он будет работать на старшем андроиде, а не на более позднем андроиде, вероятно, что-то связано с вашим порядком включения функций gl и такие, все, что я могу сказать вам, попытаться прокомментировать одну вещь, может быть, пару разных за раз, посмотрите, будет ли она работать, вы должны иметь глубину, хотя из-за того, что ваш код имеет gluperspective, а не орто – JRowan

ответ

0

Я нашел решение, проблема была в загрузчике модели, потому что по какой-то причине File или FileInputStream по умолчанию не имеет значения по умолчанию в 3.x + (я оптимизировал класс для использования с другими java-проектами).