2013-05-23 3 views
0

Почему этот код не работает?Cant draw используя glDrawArrays

// 1 square (made by 4 quads) to be rendered 
GLfloat vertices_position[] = { 
    x, y, 
    x+w, y, 
    x+w, y+h, 
    x, y+h, 
}; 

glEnableClientState(GL_VERTEX_ARRAY); 
glVertexPointer(2, GL_FLOAT, 0, vertices_position); 

glDrawArrays(GL_QUADS, 0, 4); 

glDisableClientState(GL_VERTEX_ARRAY); 

Я использую glew с этим, и я не получаю ошибок компиляции, все, что я получаю, ничто не рисуется на экране.

, если я использую это вместо того, чтобы она отлично работает:

glPushMatrix(); 

    glTranslatef(0, 0, 0); 

    glScalef(scale,scale,1); 
    //set color 
    glColor4f(R, G, B, A); 

    glBegin(GL_QUADS); 

     glTexCoord2f( texLeft, texTop); 
     glVertex2f(x, y); 

     glTexCoord2f(texRight, texTop); 
     glVertex2f(x+w, y); 

     glTexCoord2f(texRight, texBottom); 
     glVertex2f(x+w, y+h); 

     glTexCoord2f( texLeft, texBottom); 
     glVertex2f(x, y+h); 

    glEnd(); 

glPopMatrix(); 
+0

Отбирается ли он? – chris

+0

У меня есть 2D-настройка с OpenGL, я не понимаю, где она будет отбираться. Тем более, что если я заменил код на немедленный режим, он отлично работает. – Tallkotten

+0

Правда, похоже, что теперь это было бы непротиворечиво, если бы вы опубликовали это. Все, что я собираюсь сделать, это то, что OpenGL выполняет обратную обработку по умолчанию, и это может быть болью, когда ее просто отбирают, а не что-то действительно неправильное. – chris

ответ

4

Я глуп ... я указал использовать текстуру, но никогда не связаны какой-либо к в vertextes ...

Этот код работает просто отлично:

GLfloat vertices_position[] = { 
    x, y, 
    x+w, y, 
    x+w, y+h, 
    x, y+h, 
}; 
GLfloat texture_coord[] = { 
    texLeft, texTop, 
    texRight, texTop, 
    texRight, texBottom, 
    texLeft, texBottom, 
}; 

glEnableClientState(GL_VERTEX_ARRAY); 
glVertexPointer(2, GL_FLOAT, 0, vertices_position); 

glEnableClientState(GL_TEXTURE_COORD_ARRAY); 
glTexCoordPointer(2, GL_FLOAT, 0, texture_coord); 

glDrawArrays(GL_QUADS, 0, 4); 

glDisableClientState(GL_TEXTURE_COORD_ARRAY); 
glDisableClientState(GL_VERTEX_ARRAY); 
+0

Это происходит со всеми нами, важно то, что вы узнали, что вызвало этот вопрос. –

+0

Да, это сводило меня с ума. Настолько рад, что он работает сейчас. Следующий VBO! ;) – Tallkotten

0

Workin' отлично здесь:

#include <GL/glew.h> 
#include <GL/glut.h> 

bool vertexArray = false; 
void keyboard(unsigned char key, int x, int y) 
{ 
    if(key == 't') vertexArray = !vertexArray; 
    glutPostRedisplay(); 
} 

void display() 
{ 
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 

    glMatrixMode(GL_PROJECTION); 
    glLoadIdentity(); 
    double winWidth = glutGet(GLUT_WINDOW_WIDTH); 
    double winHeight = glutGet(GLUT_WINDOW_HEIGHT); 
    double ar = winWidth/winHeight; 
    glOrtho(-1 * ar, 1 * ar, -1, 1, -1, 1); 

    glMatrixMode(GL_MODELVIEW); 
    glLoadIdentity(); 

    float x = -0.5f; 
    float y = -0.5f; 
    float w = 1; 
    float h = 1; 
    float scale = 1; 

    glPushMatrix(); 
    glTranslatef(0, 0, 0); 
    glScalef(scale,scale,1); 
    //set color 
    glColor4f(1, 0, 0, 1); 

    if(vertexArray) 
    { 
     GLfloat vertices_position[] = { 
      x, y, 
      x+w, y, 
      x+w, y+h, 
      x, y+h, 
     }; 

     glEnableClientState(GL_VERTEX_ARRAY); 
     glVertexPointer(2, GL_FLOAT, 0, vertices_position); 
     glDrawArrays(GL_QUADS, 0, 4); 
     glDisableClientState(GL_VERTEX_ARRAY); 
    } 
    else 
    { 
     glBegin(GL_QUADS); 
     glVertex2f(x, y); 
     glVertex2f(x+w, y); 
     glVertex2f(x+w, y+h); 
     glVertex2f(x, y+h); 
     glEnd(); 
    } 

    glPopMatrix(); 

    glutSwapBuffers(); 
} 

int main(int argc, char **argv) 
{ 
    glutInit(&argc, argv); 
    glutInitDisplayMode(GLUT_RGBA | GLUT_DEPTH | GLUT_DOUBLE); 
    glutInitWindowSize(640, 480); 
    glutCreateWindow("GLUT"); 
    glutDisplayFunc(display); 
    glutKeyboardFunc(keyboard); 
    glewInit(); 
    glutMainLoop(); 
    return 0; 
} 
+0

Я устал от него без текстур-коордов с немедленным режимом, и он не рисовал изображение ... так что, я думаю, мне нужно определить текстуры-координаты для работы массива! – Tallkotten