Открытая линия GL ES не имеет конечной точки - PullRequest
0 голосов
/ 12 января 2012

Я использовал следующие строки кода, чтобы нарисовать линию из точки А в точку Б.

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];

}

1 Ответ

1 голос
/ 12 января 2012

Если вы не указали матрицы проекции и вида модели, то точка B находится вне области просмотра, которая находится в диапазоне [-1, 1] для измерений x и y.

Редактировать (в ответ на измененный вопрос): Точка B выходит за границы, установленные вызовом glOrthof(), поэтому линия должна выходить за пределы области просмотра .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...