Open GL ES 线没有终点

发布于 2024-12-26 02:36:08 字数 2339 浏览 2 评论 0原文

我使用以下代码行从 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

梦途 2025-01-02 02:36:08

如果您尚未指定投影和模型视图矩阵,则点 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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文