Open GL ES 线没有终点
我使用以下代码行从 A 点到 B 点绘制一条线。
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 点并继续绘制。所以我得到一条没有终点的线。任何形式的帮助表示赞赏。 谢谢。
这就是我的整个功能的样子。
-(void)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];
}
I have used the following lines of code to draw a line from point A to point B.
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);
But my problem is the line does not end at the point B. It passes point B and keeps drawing. So I get a line which does not have an end point. Any kind of help is appreciated.
Thank You.
This is how my whole function looks like.
-(void)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];
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
如果您尚未指定投影和模型视图矩阵,则点 B 位于视口之外,对于 x 和 y 维度来说,该点都在 [-1, 1] 范围内。
编辑(回应修改后的问题):点 B 位于调用
glOrthof()
设置的边界之外,因此该行应该离开视口的边缘。If you haven't specified projection and model-view matrices, then point B is outside the viewport, which is in the range [-1, 1] for both x and y dimensions.
Edit (in response to amended question): Point B is outside the bounds set by the call to
glOrthof()
, so the line should go off the edge of the viewport.