glDrawArrays рисует случайную точку в начале координат? - PullRequest
1 голос
/ 26 марта 2012

У меня есть несколько объектов, которые я рисую с помощью веерных треугольников, но как только я устанавливаю свой glVertexPointer и вызываю glDrawArrays, всегда есть одна точка в начерченном чертеже, которую я не указал, по крайней мере, явно. Ниже я рисую сцену. Функция DrawScene установлена ​​на таймер, который вызывается каждые 30 мс.

    // initialize openGL scene
    InitializeGL(){
    glViewport(0, 0, 800, 600); 
    glEnable(GL_MULTISAMPLE);
    glClearDepth(1.0f);
    glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_FASTEST);
    glShadeModel(GL_FLAT);
    glEnable(GL_DEPTH_TEST);
    glEnable(GL_CULL_FACE); 
    glClearColor(0.0f,0.0f,0.0f,0.0f);
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    setUpView() // optional makes a call to glRotate() and glTranslate() in MODELVIEW matrix mode

    drawAxis() //optional method to draw x,y,z axis

    startDrawSceneTimer() // method that just starts the DrawScene timer to 30ms

    }


    DrawScene()
    {
        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
        glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
        glEnable(GL_VERTEX_ARRAY);
        //poly2 is a 7 point sided polygon, array is pointX, pointY, pointZ of each vertex
        GLfloat poly2 [21] ={ -761.805 , 0.0 , 165.184 , -750.39 , 0.0 , 160.456 ,
        -745.47 , 0.0 , 160.456 , -745.47 , 0.0 , 170.298 , -749.425 , 0.0 , 177.359 ,
        -755.31 , 0.0 , 180.141 , -765.155 , 0.0 , 177.421};
        glVertexPointer(3,GL_FLOAT,0,poly2);
        glDrawArrays(GL_TRIANGLE_FAN,0,21);
        glDisable(GL_VERTEX_ARRAY);
    }

Существует только один полигон в нижнем левом квадранте изображения, похожий на шестиугольник. Долгая связь с происхождением является аномалией. Мой массив вершин "poly2" не включает в себя вершину (0,0,0).

Вот изображение того, что я получаю:

image

Когда я переключаю GL_TRIANGLE_FAN на GL_POINTS, точка в начале координат также рисуется. Я не могу найти ничего другого в моем коде, создающем точку. Я также попытался удалить код для рисования осей x, y и z, но это не изменило проблему.

1 Ответ

5 голосов
/ 26 марта 2012

Вы передаете неверный аргумент glDrawArrays. Последний параметр не должен быть числом с плавающей точкой в ​​массиве, скорее это должно быть количество вершин. Поскольку вы используете формат вершин x, y, z, вместо этого вы должны передать 21/3 = 7 . Как сейчас, вызов функции будет считывать память массива, что, вероятно, вызывает странное поведение, с которым вы сталкиваетесь.

См. Такие примеры: http://forums.toucharcade.com/showthread.php?p=497677

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...