2014-12-08 2 views
0

Недавно я пытался отобразить 3D-сферу в OpenGL с помощью треугольников. Я тестировал и модифицировал код с разных сайтов и, наконец, нашел выигрышную комбинацию. Единственная проблема заключается в наличии видимых пробелов в этой сфере. Какие-нибудь мысли о том, что будет причиной этого?Разрывы OpenGL в сфере

Код для визуализации сферы

float Slices = 30; 
float Stacks = 60; 
float Radius = 20.0; 
for (int i = 0; i <= Stacks; ++i){ 

    float V = i/(float) Stacks; 
    float phi = V * glm::pi <float>(); 

    for (int j = 0; j <= Slices; ++j){ 

     float U = j/(float) Slices; 
     float theta = U * (glm::pi <float>() * 4); 

     float x = cosf (theta) * sinf (phi); 
     float y = cosf (phi); 
     float z = sinf (theta) * sinf (phi); 
     x *= Radius; 
     y *= Radius; 
     z *= Radius; 

     Vertex *v = new Vertex {{x,y,z}, //Position 
           {255,0,0}}; //Color 
     screenToBuffer(v, 1); 
     delete []v; 
    } 
} 

Проблема enter image description here

+2

Что делает 'screenToBuffer (v, 1);' do? –

+0

Отправляет вершину в VBO. – user3814792

+1

Где код рендеринга? –

ответ

-1

Try и установить его на GL_TRIANGLE_STRIP Полоса

Что может быть проблема в том, что она рассматривает каждую группу из трех вершины - только один треугольник.

Подобно

Indices:  0 1 2 3 4 5 ... 
Triangles: {0 1 2} {3 4 5} 

GL_TRIAGLE_STRIP будет делать это.

Indices:  0 1 2 3 4 5 ... 
Triangles: {0 1 2} 
       {1 2 3} drawing order is (2 1 3) to maintain proper winding 
       {2 3 4} 
        {3 4 5} 

Смотрите этот ответ на правильный способ сделать это. https://stackoverflow.com/a/7958376/1943599

+0

Просто рисунок треугольной полосы с точками, указанными в коде OP, все равно будет выглядеть примерно одинаково неправильно. Точки не рассчитываются в порядке, который был бы правильным, чтобы отобразить сферу с треугольными полосками. –

+0

Я только что предположил, что у него отключено лицо. – Mellester

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