2012-01-12 117 views
0

我用下面的代碼行畫從點A線到B點的Open GL ES線路沒有終點

const GLfloat line[] = { 
    0.0f, 0.0f, //point A 
    2.5f, -1.0f, //point B 
}; 
glColor4f(0.0f,1.0f,0.0f,1.0f); 
glVertexPointer(2, GL_FLOAT, 0, line); 
glEnableClientState(GL_VERTEX_ARRAY); 
glDrawArrays(GL_LINES, 0, 2);  

但我的問題是線路在沒有結束點B,它通過點B並繼續繪製。所以我得到一條沒有終點的線。任何形式的幫助表示讚賞。 謝謝。

這是我整個功能的樣子。

- (無效)popupCircles {

[EAGLContext setCurrentContext:context]; 
glBindFramebufferOES(GL_FRAMEBUFFER_OES, viewFramebuffer); 
glViewport(0, 0, backingWidth, backingHeight); 
glMatrixMode(GL_PROJECTION); 
glLoadIdentity(); 
glOrthof(-1.0f, 1.0f, -1.5f, 1.5f, -1.0f, 1.0f); 
glMatrixMode(GL_MODELVIEW); 
glClearColor(0.0f, 0.0f, 0.0f, 1.0f); 
glClear(GL_COLOR_BUFFER_BIT); 
glPushMatrix(); 
const GLfloat line[] = { 
    0.0f, 0.0f, //point A 
    2.5f, -1.0f, //point B 
}; 
glColor4f(0.0f,1.0f,0.0f,1.0f); //line color 
glVertexPointer(2, GL_FLOAT, 0, line); 
glEnableClientState(GL_VERTEX_ARRAY); 
glDrawArrays(GL_LINES, 0, 2);  
glPopMatrix();  

glPushMatrix(); 
const GLfloat line2[] = { 
    0.0f, 0.0f, //point A 
    -2.5f, -1.0f, //point B 
}; 
glColor4f(0.0f,1.0f,0.0f,1.0f); //line color 
glVertexPointer(2, GL_FLOAT, 0, line2); 
glEnableClientState(GL_VERTEX_ARRAY); 
glDrawArrays(GL_LINES, 0, 2);  
glPopMatrix(); 

glPushMatrix(); 
const GLfloat line3[] = { 
    0.0f, 0.0f, //point A 
    1.0f, 3.0f, //point B 
}; 
glColor4f(0.0f,1.0f,0.0f,1.0f); //line color 
glVertexPointer(2, GL_FLOAT, 0, line3); 
glEnableClientState(GL_VERTEX_ARRAY); 
glDrawArrays(GL_LINES, 0, 2);  
glPopMatrix();  
glVertexPointer(2, GL_FLOAT, 0, square); 
glEnableClientState(GL_VERTEX_ARRAY); 
glColor4f(1.0f, 0.0f, 0.0f, 1.0f); 
glPushMatrix(); 
glScalef(trans, trans, trans); 
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); 
glPopMatrix();  
glPushMatrix(); 
glScalef(trans, trans, trans); 
glTranslatef(2.5f, -1.0f, 0.0f); 
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); 
glPopMatrix(); 
glPushMatrix(); 
glScalef(trans, trans, trans); 
glTranslatef(-2.5f, -1.0f, 0.0f); 
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); 
glPopMatrix(); 
glPushMatrix(); 
glScalef(trans, trans, trans); 
glTranslatef(1.0f, 3.0f, 0.0f); 
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); 
glPopMatrix(); 
glBindRenderbufferOES(GL_RENDERBUFFER_OES, viewRenderbuffer); 
[context presentRenderbuffer:GL_RENDERBUFFER_OES]; 

}

+0

你的投影和模型視圖矩陣是什麼樣的? – 2012-01-12 04:10:46

回答

1

如果尚未指定的投影和模型視圖矩陣,那麼B點是視,它是在範圍[外 - 1,1]的x和y維度。

編輯(響應於經修正的問題):點B是通過調用glOrthof()設定的邊界之外,所以線應該熄滅視口的邊緣。

+0

這一定是問題所在。我對打開gl沒有太多的想法。感謝您的反饋,我將研究模型視圖矩陣並回復您。 – thilok 2012-01-12 04:21:09

+0

@thilok:我剛剛閱讀了您的更新問題。模型視圖矩陣不是問題。看到我修正的答案。 – 2012-01-12 04:36:11

+0

先生,我看着glOrtho和glViewport文檔,但仍然遇到同樣的問題。你能告訴我應該如何改變glOrthof()來解決這個問題嗎? – thilok 2012-01-12 05:55:21