Проблемы с сеткой OpenGL ES на Android - PullRequest
0 голосов
/ 15 ноября 2011

Я много работал с сетками DirecX, но я не могу понять, что происходит с моими треугольниками в OpenGL ES.Я попытался использовать некоторые примеры блоков из Интернета, а также данные для блока, который у меня был в старом проекте, но они всегда оказываются неправильными и часто невидимыми.

Вот пример.

с вершинами:

-25.0 -25.0 25.0 
25.0 -25.0 25.0 
-25.0 25.0 25.0 
25.0 25.0 25.0 

и индексами (начиная с 0):

2 1 3 

Я получаю треугольник, прямой угол которого указывает на совершенно другой угол экрана, чемодин это мне дает, если я использую индексы:

3 1 2

Исходя из моего понимания, он даже не должен показывать треугольник, если вершины перечислены в порядке CW с моей текущей конфигурацией.Есть какие-нибудь подсказки о том, что происходит с этими вертами ???

Кстати, вот мой код рисования:

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

gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
gl.glVertexPointer(3, GL10.GL_FLOAT, 0, vertexBuffer);
//gl.glColor4f(1.0f,0.0f,1.0f,1.0f);
gl.glDrawElements(GL10.GL_TRIANGLES, indexCount, GL10.GL_UNSIGNED_SHORT, indexBuffer);
gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);
gl.glDisable(GL10.GL_CULL_FACE);

edit:

3 1 2 рисует угол, указывающий на верхний левый угол, а 2 1 3 рисует один, указывающий навверху справа, но рисуется только тот, который указан первым.Это так странно ...

{
public void initAndStuff(...)
{
    try{
        //
        ...
        They get initialized up here...
        This is also where the external data is fed in (but is erased below)
        //

        ////////////////////////////////
        vertexBuffer.clear();
        indexBuffer.clear();

        vertexBuffer.put(-25.0f);
        vertexBuffer.put(-25.0f);
        vertexBuffer.put(25.0f);

        vertexBuffer.put(25.0f);
        vertexBuffer.put(-25.0f);
        vertexBuffer.put(25.0f);

        vertexBuffer.put(-25.0f);
        vertexBuffer.put(25.0f);
        vertexBuffer.put(25.0f);

        vertexBuffer.put(25.0f);
        vertexBuffer.put(25.0f);
        vertexBuffer.put(25.0f);


        indexBuffer.put(3);
        indexBuffer.put(1); // points toward top left
        indexBuffer.put(2);
        indexBuffer.put(2);
        indexBuffer.put(1); // points toward top right
        indexBuffer.put(3);


        indexIndex = 6;
        //////////////////////////////////


        // wrap things up
        vertexBuffer.position(0);
        indexBuffer.position(0);

    }
    catch(Exception e)
    {
        e.printStackTrace();
        Toast.makeText(context,"exception in loadfile",Toast.LENGTH_LONG).show();
        return false;
    }
    return true;
}

public final void draw(GL10 gl)
{
    gl.glFrontFace(GL10.GL_CCW);
    gl.glEnable(GL10.GL_CULL_FACE);
    gl.glCullFace(GL10.GL_BACK);

    gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
    gl.glVertexPointer(3, GL10.GL_FLOAT, 0, vertexBuffer);
    //gl.glColor4f(1.0f,0.0f,1.0f,1.0f);
    gl.glDrawElements(GL10.GL_TRIANGLES, indexIndex, GL10.GL_UNSIGNED_SHORT, indexBuffer);
    gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);
    gl.glDisable(GL10.GL_CULL_FACE);

}
}

1 Ответ

0 голосов
/ 16 ноября 2011

Это потому, что я инициализировал свой короткий буфер как буфер int.

...