Линии OpenGL встречаются в середине экрана, а не прямо - PullRequest
0 голосов
/ 08 июля 2011

Я попытался нарисовать линию с помощью OpenGL, которая идет горизонтально от одного края экрана к другому (на телефоне Android). Он должен двигаться вверх и вниз, читая датчик акселерометра. Моя проблема в том, что линия движется вверх и вниз только в конечных точках. В середине это остается в 0,0 (середина экрана). Итак, строка имеет вид буквы V.

Вот мой код:

@Override
public void onDrawFrame(GL10 gl) {
    gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
    gl.glClearColor(0f, 0f, 0f, 0f);

    float vertices[] = {
            0-width/2,-accel,0,
            width/2,-accel,0
        };
        ByteBuffer vbb = ByteBuffer.allocateDirect(vertices.length * 4);
        vbb.order(ByteOrder.nativeOrder());
        FloatBuffer vertexBuffer = vbb.asFloatBuffer();
        vertexBuffer.put(vertices);
        vertexBuffer.position(0);

        gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
        gl.glVertexPointer(3, GL10.GL_FLOAT, 0, vertexBuffer);

        short[] indices = { 0, 1, 2, 0, 2, 3 };
        ByteBuffer ibb = ByteBuffer.allocateDirect(indices.length * 2);
        ibb.order(ByteOrder.nativeOrder());
        ShortBuffer indexBuffer = ibb.asShortBuffer();
        indexBuffer.put(indices);
        indexBuffer.position(0);

        gl.glFrontFace(GL10.GL_CCW);
        gl.glEnable(GL10.GL_CULL_FACE);
        gl.glCullFace(GL10.GL_BACK);            

        gl.glDrawElements(GL10.GL_LINE_LOOP, indices.length,
                  GL10.GL_UNSIGNED_SHORT, ibb);

        gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);

}

1 Ответ

1 голос
/ 08 июля 2011

Вы уверены, что ваши индексы верны? Если я правильно понимаю, у вас есть только 2 вершины, и все же ваши индексы используют 4 вершины. Я посмотрел на пример на http://www.songho.ca/opengl/gl_vertexarray.html, чтобы придумать это.

...