2011-02-12 99 views
2

我正在编写一个在Android NDK中绘制openGL es 1.0并在android手机上呈现它的应用程序。到目前为止,我可以画两条线。问题在于那两条线是彩虹。我试图调试屏幕上的坐标(0,0和1,1),因此我在绘制的两条线上添加了颜色。一个应该用红色绘制,另一个用绿色绘制。我用来绘制它们的代码如下:openGL中的彩虹线es

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)。

回答

3

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

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

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

+0

嗯,我用glColor4f(),而不是想通了,我的色差问题。你在我的颜色数组中有8个索引的建议可行(但仍然因为颜色数组而失败,出于某种原因,它将每种颜色与最后一个按位进行OR运算)。我同意你应该是2,而不是4,但是当我使用两个时,从右上角到中间只画出一条绿线。我可能会发布另一个问题,但如果我无法弄清楚。 – Hohohodown 2011-02-12 20:22:16