2012-07-15 20 views
5

Próbuję rzeczy Vertex Arrays ale z jakiegoś powodu polecenie glDrawElements nic nie rysuje dla mnie. Mogę rysować za pomocą glBegin/glEnd i glDrawElements pomiędzy, ale glDrawElements nie działa. Oto fragment kodu:OpenGL: glDrawElements nie rysuje

Te tablice się skonfigurować w konstruktorze:

double points[100]; 
GLint indices[50]; 

for (int i=0; i < 50; i++){ 
    points[2*i] = radius * cos(i*2*PI/50); 
    points[2*i + 1] = radius * sin(i*2*PI/50); 
    indices[i] = i; 
} 

kod używając tylko tablicę punktów z glArrayElement robocza:

void GLCircle::draw() 
{ 
    glEnableClientState(GL_VERTEX_ARRAY); 
    glVertexPointer(2, GL_DOUBLE, 0, points); 

    glBegin(GL_POLYGON); 
    for (int i=0; i < 50; i++){ 
     glArrayElement(i); 
    } 
    glEnd(); 
} 

pracuje również kod, za pomocą punktów tablicę, specyficzne indeksy dostępne za pośrednictwem tablicy indeksów:

void GLCircle::draw() 
{ 
    glEnableClientState(GL_VERTEX_ARRAY); 
    glVertexPointer(2, GL_DOUBLE, 0, points); 

    glBegin(GL_POLYGON); 
    for (int i=0; i < 50; i++){ 
     glArrayElement(indices[i]); 
    } 
    glEnd(); 
} 

Kod nieprzechodni , próba użycia glDrawElements:

void GLCircle::draw() 
{ 
    glEnableClientState(GL_VERTEX_ARRAY); 
    glVertexPointer(2, GL_DOUBLE, 0, points); 

    glDrawElements(GL_POLYGON, 4, GL_INT, indices); 
} 

Każda rada? To nie jest całkowicie niezbędne dla mnie używać go w tym miejscu, ale jest to niepokojące, że nie działa ...

Odpowiedz

7

The 2nd parametr glDrawElements jest count, więc nie powinno być 4 numery indeksów (50) ?

4

Parametry

glDrawElements() 

są następujące ..:

1-te [Tryb ] parametr, jaki rodzaj prymitywnych do renderowania.

2nd [count] parametr powinien być liczbą elementów do renderowania. to znaczy. liczba wierzchołków

3-ty [typu] parametr powinien być typu wartości w 4 parametru .. może tylko być albo

GL_UNSIGNED_BYTE or GL_UNSIGNED_SHORT or GL_UNSIGNED_INT 

4th [indeksy] Parametr jest wskaźnikiem do miejsca przechowywania indeksów.

Możesz przeczytać więcej na ten here ..

+3

"4th [indeksy] parametrem jest wskaźnik do miejsca, gdzie przechowywane są indeksy." NOOOOOO! Indeksy MUSZĄ być przechowywane w buforze, który jest aktualnie powiązany z GL_ELEMENT_ARRAY_BUFFER. Czwarty parametr to wskaźnik przesunięcia w tablicy indeksów. – IceCool

+0

Zacytowałem oficjalne dokumenty. Http://www.opengl.org/sdk/docs/man/xhtml/glDrawElements.xml – iKlsR

+5

O tak, dobrze sry. Jest to rzeczywiście wskaźnik do miejsca, w którym przechowywane są indeksy. – IceCool

0

Właśnie w obliczu tego samego problemu.

Spróbuj GL_UNSIGNED_INT

glDrawElements(GL_POLYGON, 4, GL_UNSIGNED_INT, indices); 
Powiązane problemy