2009-10-21 2 views
0

Итак, я начинаю работать с openGL, следуя инструкциям в Jeff LaMarche's blog, и у меня возникла проблема при попытке рисовать квадрат с использованием режима GL_TRIANGLE_STRIP с glDrawArrays.Почему этот червь выглядит с GL_TRIANGLE_STRIP в OpenGL ES 1.1

Это работает, поэтому я имею в виду, что я могу нарисовать квадрат, но я получаю этот странный рисунок сбоя. Вы можете увидеть здесь:

Drawing glitch http://img10.imageshack.us/img10/1631/picture1io.png

Я использую шаблон Xcode, который предоставленный Джеффом, поэтому я предполагаю, что установка все собственно. Код, я использую в функции drawView выглядит следующим образом:

Square2D *square = malloc(sizeof(Square2D)); 
Square2DSet(square, -0.25, -0.25, -20.0, 0.5, 0.5); 

glLoadIdentity(); 
glClearColor(0.7, 0.7, 0.7, 1.0); 
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 
glEnableClientState(GL_VERTEX_ARRAY); 
glColor4f(1.0, 0.0, 0.0, 1.0); 
glVertexPointer(3, GL_FLOAT, 0, square); 
glDrawArrays(GL_TRIANGLE_STRIP, 0, 12); 
glDisableClientState(GL_VERTEX_ARRAY); 

if(square != NULL) 
    free(square); 

вот код для Square2d и Square2DSet:

typedef struct { 
    Vertex3D tl; 
    Vertex3D bl; 
    Vertex3D tr; 
    Vertex3D br; 
} Square2D; 

static inline void Square2DSet(Square2D *sq, GLfloat x, GLfloat y, GLfloat z, GLfloat width, GLfloat height) 
{ 
    sq->tl = Vertex3DMake(x, y, z); 
    sq->bl = Vertex3DMake(x, y + height, z); 
    sq->tr = Vertex3DMake(x + width, y, z); 
    sq->br = Vertex3DMake(x + width, y + height, z); 
} 

Я уверен, что я делаю что-то неправильно, просто не уверен, какие. В конце концов глюк исчезнет после того, как программа запустится немного.

Любые идеи?

Приветствия

+0

Что произойдет, если вы измените значение на другое? [например: есть ли другая фигура случайно?] – 2009-10-21 04:51:18

+0

Err, ... изменить * цвет * на ... – 2009-10-21 04:52:00

ответ

2

glDrawArrays (GL_TRIANGLE_STRIP Полоса, 0, 12);

рисует 12 вершин. Вы хотите 4. Его спрашивают, сколько индексов, а не сколько ценностей нужно посмотреть. Он будет умножать индекс на число значений для каждого индекса.

Причина, по которой ее сходит с ума, состоит в том, что ее мусор, а затем исчезает, потому что я предполагаю, что мусор заполняется 0 или что-то, и он просто уходит.

+0

bahh !!! Мне нужно RTFM. Спасибо, kidnamedlox. – Meroon

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