2011-02-12 139 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