2014-04-24 2 views
0

두 가지 다른 텍스처를 사용해야하는 프로그램을 작성 중입니다. 하나의 파일을 읽어 들여 텍스쳐로 사용할 수는 있지만 지금까지는 두 개의 텍스쳐를 사용할 수 없었습니다. 나는 내가 생각할 수있는 모든 시도하고 일이 제대로 동작하지 않습니다OpenGL에서 두 텍스처 사용

 FILE *fd; 
     int k, nm; 
     char c; 
     int i, i; 
     char b[256]; 
     float s; 
     int red, green, blue; 

     fd = fopen("AI_Lab.ppm", "r"); 

     // check first line for P3 
     fscanf(fd, "%[^\n]", b); 
     if (b[0] != 'P' || b[1] != '3') { 
       printf("%s is not a PPM file\n", b); 
       system("pause"); 
       exit(0); 
       } 
     // skip comments 
     fscanf(fd, "%c%c", &c, &c); 
     while (c == '#') { 
       fscanf(fd, "%[^\n]", b); 
       fscanf(fd, "%c%c", &c, &c); 
     } 

     // put back first character of first non-comment line 
     ungetc(c, fd); 
     // read file info 
     fscanf(fd, "%d %d %d", &o, &m, &k); 

     nm = o * m; // overall size 

     image = malloc(3*sizeof(GLuint)*nm); 

     s = 255./k; 

     for (i=0; i<nm; i++) { 
      fscanf(fd, "%d %d %d", &red, &green, &blue); 
      image[3*nm - 3*i - 3] = red; 
      image[3*nm - 3*i - 2] = green; 
      image[3*nm - 3*i - 1] = blue; 
     } 

     glPixelTransferf(GL_RED_SCALE, s); 
     glPixelTransferf(GL_GREEN_SCALE, s); 
     glPixelTransferf(GL_BLUE_SCALE, s); 
     glPixelStorei(GL_UNPACK_SWAP_BYTES, GL_TRUE); 
     glPixelStorei(GL_UNPACK_ALIGNMENT, 1); 
     glEnable(GL_TEXTURE_2D); 
     glTexImage2D(GL_TEXTURE_2D, 0, 3, o1, m1, 0, GL_RGB, GL_UNSIGNED_INT, image); 
     glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP); 
     glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP); 
     glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); 
     glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); 

     glEnable (GL_DEPTH_TEST); 
     glClearColor(0.0, 0.0, 0.0, 1.0); 

: 여기에 내가 가진 하나 개의 텍스처를 설정하는 내 코드입니다.

+1

텍스처 객체를 조작 할 수있게 해주는'glGenTextures'와'glBindTexture'를 찾는다. 당신이 사용하는 것은 "기본 질감"의 개념입니다. 둘 이상의 텍스처를 지원하지 않는 이상이 사용 모델도 사용되지 않습니다. –

+0

glGenTextures를 기존 코드로 작업 할 수있는 방법이 있습니까? 아니면 스크랩하고 다시 시작해야합니까? (내 코드에서 glBindTexture를 사용하고 있습니다.) – mkjo0617

+1

원하는 경우 기존 코드에 추가 할 수 있습니다. 'glTexImage2D' 호출 전에 어딘가에 두 건의 호출이 필요합니다. –

답변

2

텍스처 사양은 괜찮아 보이지만 OpenGL의 기본 사항을 알아볼 필요가 있습니다. 빨간 책은 시작하기 좋은 곳입니다. Texture Objects 섹션에 아래에

http://www.glprogramming.com/red/chapter09.html

머리.

glTexImage2d을 호출하기 전에 새 텍스처 개체를 생성하고 바인딩해야합니다. 각각의 텍스처에는 고유 한 객체가 있어야합니다!

렌더링 할 때 프리 머티를 그리기 전에 렌더링 할 텍스처를 간단히 바인드하면됩니다.

관련 문제