2012-03-26 2 views
0

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

// 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).

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

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

+0

Дать [SSCCE] (http://sscce.org/). – genpfault

+0

Я не понимаю твоего изображения. Что с этим не так? Белый ли объект не должен быть там? Или что-то другое? – user1118321

ответ

4

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

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

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