【问题标题】:Rainbow lines in openGL esopenGL es 中的彩虹线
【发布时间】:2011-02-12 04:18:41
【问题描述】:

我编写了一个应用程序,它在 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),则可以加分。

【问题讨论】:

    标签: android opengl-es android-ndk


    【解决方案1】:

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

    另外,我认为glDrawArrays() 调用的第三个参数应该是2,而不是4,因为你只渲染两个顶点。

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

    【讨论】:

    • 好吧,我通过使用 glColor4f() 解决了我的颜色问题。您关于在我的颜色数组中有 8 个索引的建议有效(但颜色数组仍然失败。由于某种原因,它是按位对每种颜色与最后一种颜色进行或运算)。我同意你的观点,应该是 2,而不是 4,但是当我使用 2 时,从右上角到中间只画了一条绿线。如果我无法弄清楚,我可能会为此发布另一个问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多