openGL es中的彩虹线

时间:2011-02-12 04:18:42

标签: android opengl-es android-ndk

我编写了一个在Android NDK中使用openGL es 1.0绘制的应用程序,并将其呈现在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

如果有人知道为什么他们画的是彩虹而不是我指定的颜色,那就太棒了。如果你可以告诉我默认情况下android的坐标系是什么样的奖励点(没有使用gluperspective或lookat)。

1 个答案:

答案 0 :(得分:3)

尝试创建一个颜色数组,每个顶点都有一个颜色。现在,当你尝试渲染两个顶点时,我认为你正在读取数组末尾的未初始化内存,因为你没有指定第二个顶点的颜色。

另外,我认为glDrawArrays()来电的第三个参数应为2,而不是4,因为您只渲染了两个顶点。

我有点惊讶它并没有因某种类型的访问冲突而崩溃,老实说:)