Радужные линии в openGL es - PullRequest
       19

Радужные линии в openGL es

2 голосов
/ 12 февраля 2011

Я пишу приложение, которое рисует в openGL es 1.0 в Android NDK и отображает его на телефоне Android.Пока я могу нарисовать две линии.Проблема в том, что эти две линии - радуга.Я пытался отладить, где координаты на экране (где 0,0 и 1,1), поэтому я добавил цвет к двум линиям, которые я рисую.Один должен быть нарисован красным, другой зеленым.Код, который я использую для их рисования, выглядит следующим образом:

void appInit()
{
    glEnable(GL_CULL_FACE);
}

void appRender(jint width, jint height)
{
    prepareFrame(width, height);

    drawLines();
}

void drawLines()
{
    glLoadIdentity();

    glPushMatrix();
    GLfloat color1[] = {0.0f,1.0f,0.0f,1.0f};
    drawLine( 1.0f,1.0f,2.0f,2.0f,color1);
    glPopMatrix();

    glPushMatrix();
    GLfloat color2[] = {1.0f,0.0f,0.0f,1.0f};
    drawLine(0.0f,0.0f,1.0f,1.0f, color2);
    glPopMatrix();
}

void drawLine(GLfloat x1, GLfloat y1, GLfloat x2, GLfloat y2, GLfloat * color)
{
    GLfloat vVertices[] =
    {x1, y1,
    x2, y2};

    glEnableClientState(GL_VERTEX_ARRAY);
    glEnableClientState(GL_COLOR_ARRAY);

    //glColor4f(color[0],color[1],color[2],color[3]);
    glColorPointer(4,GL_FLOAT,0,color);
    glVertexPointer(2, GL_FLOAT, 0, vVertices);
    glDrawArrays(GL_LINES, 0, 4);

    glDisableClientState(GL_COLOR_ARRAY);
    glDisableClientState(GL_VERTEX_ARRAY);
}

void prepareFrame(int width, int height)
{
    glViewport(0, 0, width, height);

    glClearColor(0.0,0.0,0.0,0.0);

    glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT);
    glLoadIdentity();
}

вызывается appInit, затем снова и снова вызывается appRender с размерами экрана.Результат таков:

http://i.stack.imgur.com/G91oX.png

Если кто-нибудь знает, почему они рисуют радугу вместо цветов, которые я указал, это было бы замечательно.Бонусные баллы, если вы можете сказать мне, на что похожа система координат по умолчанию на андроиде (не используется слепая перспектива или lookat).

1 Ответ

3 голосов
/ 12 февраля 2011

Попробуйте создать массив цветов, который имеет цвет для каждой вершины.Прямо сейчас я думаю, что вы читаете конец массива в неинициализированную память, когда пытаетесь отобразить две вершины, поскольку вы не указываете цвет для второй вершины.

Кроме того, я думаю, что третьяаргументом для вашего glDrawArrays() вызова должно быть 2, а не 4, поскольку вы визуализируете только две вершины.

Я несколько удивлен, что это не привело к нарушению доступа какого-либо родаЧестно говоря:)

...