2015-05-13 2 views
0

Я пытаюсь нарисовать эллипс, используя OpenGL и нарисовать текстуру. Я не хочу использовать glBegin (...) или glVertex4f, поскольку они устарели. Я получил Ellipse для отображения с текстурой, но только когда я использую GL_LINE_LOOP. Это не позволяет мне заполнить Ellipse текстурой. Я попытался использовать GL_TRIANGLE_STRIP в надежде, что это заполнит Эллипс, но это, кажется, ничего не делает.OpenGL рисунок Circle/Ellipse (заполнен) без glBegin?

void Ellipse::makeEllipse(float radiusX, float radiusY) 
{ 
    for(int i=0; i < 360; i++) 
    { 
    float rad = i*DEG2RAD; 
    ellipse_vertices[i] = vec4(cos(rad)*radiusX, 
       sin(rad)*radiusY,0,1); 
    } 
} 
. 
. 
. 
glDrawArrays (GL_TRIANGLE_STRIP, 0, numEllipsisVertices); 

Я пытался найти решение этого, но есть только устаревшие примеры использования GLBegin и glVertex.

+2

Великой вещь о тех устаревших примерах? Обычно вы можете вывести их в современный век, заменив вызовы 'glVertex()' 'push_back()' на 'std :: vector <>' 'glm :: vec3's. – genpfault

ответ

0

GL_TRIANGLE_STRIP, скорее всего, не режим рисования, который вы хотите использовать для эллипса. Но GL_TRIANGLE_FAN должен работать довольно красиво. Я предлагаю вам начать эллипс с центральной вершиной, чтобы облегчить геометрию:

void Ellipse::makeEllipse(float radiusX, float radiusY) 
{ 
    ellipse_vertices[0] = vec4(0,0,0,1); 
    for(int i=1; i < numEllipseVertices; i++) 
    { 
    float rad = i*DEG2RAD; 
    ellipse_vertices[i] = vec4(cos(rad)*radiusX, 
       sin(rad)*radiusY,0,1); 
    } 
} 
. 
. 
. 
glDrawArrays (GL_TRIANGLE_STRIP, 0, numEllipseVertices); 

Малого язык намек: "ellipsis""ellipse"

Смежные вопросы