2012-04-29 3 views
0

이 코드는 아무 것도 표시하지 않습니다. 나는 많은 양의 텍스처에 문제가있다. 텍스처 처리에 대한 코드 줄에 주석을 달면 완벽하게 작동합니다. 4 색 사각형을 표시합니다. 나 좀 도와 줄 수있어? 당신은 확실히 여기에 약간의 오차가 발생하고 같은VBO 텍스처링이 작동하지 않습니다.

#define OFFSET_BUFFER(bytes) ((GLfloat *)NULL + bytes) 

GLfloat vertices[12] = 
{ 
    -1.0f, -1.0f, 1.0f, 
    -1.0f, 1.0f, 1.0f, 
    1.0f, 1.0f, 1.0f, 
    1.0f, -1.0f, 1.0f, 
}; 

GLfloat colors[12] = 
{ 
    1.0f, 0.0f, 0.0f, 
    0.0f, 1.0f, 0.0f, 
    0.0f, 0.0f, 1.0f, 
    1.0f, 0.0f, 1.0f, 
}; 

GLfloat texture[8] = 
{ 
    0.0f, 0.0f, 
    1.0f, 0.0f, 
    1.0f, 1.0f, 
    0.0f, 1.0f 
}; 

int main(int argc, char *argv[]) 
{ 
    SDL_Init(SDL_INIT_VIDEO); 
    SDL_WM_SetCaption("Texture Mapping",NULL); 
    SDL_SetVideoMode(500, 500, 32, SDL_OPENGL); 

    bool continuer = true; 
    SDL_Event event; 
    GLuint buf[2]; 
    GLuint texture1; 

    glClearDepth(1.0f); 
    glClearColor(0.1f, 0.1f, 0.1f, 0.1f); 
    glEnable(GL_DEPTH_TEST); 
    glMatrixMode(GL_PROJECTION); 
    glLoadIdentity(); 
    gluPerspective(70.0f, (float)500.0f/(float)500.0f, 1.0f, 3000.0f); 
    glewInit(); 

    texture1 = loadTexture("caisse.jpg"); 
    glBindTexture(GL_TEXTURE_2D, texture1); 

    glGenBuffers(2, &buf[0]); 
    glBindBuffer(GL_ARRAY_BUFFER, buf[0]); 
    glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW); 

    glBindBuffer(GL_ARRAY_BUFFER, buf[1]); 
    glBufferData(GL_ARRAY_BUFFER, sizeof(colors), colors, GL_STATIC_DRAW); 

    glBindBuffer(GL_ARRAY_BUFFER, texture1); 
    glBufferData(GL_ARRAY_BUFFER, sizeof(texture), texture, GL_STATIC_DRAW); 

    while (continuer) 
    { 
     SDL_WaitEvent(&event); 
     switch(event.type) 
     { 
      case SDL_QUIT: 
       continuer = false; 
     } 

     glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 

     glEnable(GL_TEXTURE_2D); 

     glMatrixMode(GL_MODELVIEW); 
     glLoadIdentity(); 

     gluLookAt(0.0f, 0.0f, 3.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f); 

     glBindBuffer(GL_ARRAY_BUFFER, buf[0]); 
     glVertexPointer(3, GL_FLOAT, 0, OFFSET_BUFFER(0)); 

     glBindBuffer(GL_ARRAY_BUFFER, buf[1]); 
     glColorPointer(3, GL_FLOAT, 0, OFFSET_BUFFER(0)); 

     glBindBuffer(GL_ARRAY_BUFFER, texture1); 
     glTexCoordPointer(2, GL_FLOAT, 0, OFFSET_BUFFER(0)); 

     glEnableClientState(GL_VERTEX_ARRAY); 
     glEnableClientState(GL_COLOR_ARRAY); 
     glEnableClientState(GL_TEXTURE_COORD_ARRAY); 

     glDrawArrays(GL_QUADS, 0, 4); 

     glDisableClientState(GL_TEXTURE_COORD_ARRAY); 
     glDisableClientState(GL_COLOR_ARRAY); 
     glDisableClientState(GL_VERTEX_ARRAY); 


     glDisable(GL_TEXTURE_2D); 

     glFlush(); 
     SDL_GL_SwapBuffers(); 
    } 

    SDL_Quit(); 

    return 0; 
} 

답변

2

첫째, 당신은, 디버깅을 위해 코드에서 glGetError()를 넣고 시작해야합니다.

질감을 texture1에 glBindBuffer로 바인딩하는 것이 맞지 않습니다. 텍스처 좌표는 텍스처와 동일하지 않습니다. 2 대신 3 개의 버퍼를 생성하고 texture[8] 텍스쳐를 세 번째 버퍼에로드해야합니다.

+0

답변 해 주셔서 감사합니다. 그것은 잘 작동합니다. 안녕 – user1364743

+1

@ user1364743 문제가 해결 된 경우 확인란을 클릭하여 대답을 수락 한 것으로 표시하십시오. – Tim