2012-01-12 113 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