Apple OpenGL: почему мой рисунок многоугольника с glVertexAttribPointer просто складывает квадрат? - PullRequest
1 голос
/ 26 ноября 2011

Предупреждение: пытаемся выучить OpenGL ...

Я нарисовал квадрат со следующим кодом.

    static const GLfloat squareVertices[] = {
        -0.5f, -0.33f, 
         0.5f, -0.33f,
        -0.5f,  0.33f, 
         0.5f,  0.33f,
    };

...

        glVertexAttribPointer(ATTRIB_VERTEX, 2, GL_FLOAT, 0, 0, squareVertices);
        glEnableVertexAttribArray(ATTRIB_VERTEX);
...

        glVertexPointer(2, GL_FLOAT, 0, squareVertices);

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

    static const GLfloat hexagonVertices[] = {
        -0.5f, -0.33f, 
        +0.0f, -0.66f, 
        +0.5f, -0.33f,
        +0.75f, +0.33f,
        -0.1f, +0.5f, 
        +0.25f, +0.33f,
    };

...

        glVertexAttribPointer(ATTRIB_VERTEX, 3, GL_FLOAT, 0, 0, hexagonVertices);
        glEnableVertexAttribArray(ATTRIB_VERTEX);

...

        glVertexPointer(3, GL_FLOAT, 0, hexagonVertices);

Я даже пытался изменить вершины, чтобы изменить форму. Я могу превратить квадрат в неправильный четырехугольный многоугольник и наклонить «шестиугольник», но это все еще просто сложенный лист бумаги.

Могу ли я сделать это таким образом?

Какой предпочтительный альтернативный способ?

1 Ответ

1 голос
/ 26 ноября 2011

Ваша проблема связана с отправкой значения 3 во втором параметре glVertexAttribPointer

Это говорит opengl использовать 3 координаты на вершину вместо двух, которые вы хотите. Так как у вас есть 12 поплавков, это становится 4 вершинами, следовательно, квадрат.

Редактировать: о, и вам нужно, чтобы первый параметр glVertexPointer также был равен 2.

...