2013-05-05 2 views
0

저는이 큐브를 가지고 있으며, 각면에 문자가 나타나는 다른 이미지로 덮고 싶습니다.큐브의 각면을 다른 이미지로 덮고 있습니다. OpenGL

enter image description here

내 문제는 이미지를 다음에서 볼 수 있듯이 그 큐브가 같은 이미지로 덮여있다. 하지만 그 편지 A가 맨 위에, B가 왼쪽에, C가 오른쪽에 나타나기를 바랍니다. 텍스처에/변환 화상 (문자 A, B, C)를 전환하기 위해

enter image description here

는이 코드를 사용

glGenTextures(1, textureA); 
    glGenTextures(1, textureB); 
    glGenTextures(1, textureC); 
    glClearColor (0.0, 0.0, 0.0, 0.0); 
     if (flagA ==1){ 
      cvtColor(imageA, imageA, CV_BGR2RGB); 
      glHint(GL_PERSPECTIVE_CORRECTION_HINT,GL_NICEST); 
      glPixelStorei(GL_UNPACK_ALIGNMENT, 1); 
      glBindTexture(GL_TEXTURE_2D, textureA); 
      glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR); 
      glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR); 
      //glTexImage2D(GL_TEXTURE_2D, 0, 4,image.cols, image.rows, 0, GL_RGB,GL_UNSIGNED_BYTE, image.data); 
      gluBuild2DMipmaps(GL_TEXTURE_2D, GL_RGB, imageA.cols, imageA.rows, GL_RGB, GL_UNSIGNED_BYTE, imageA.data); 
     } 
     if (flagC ==1){ 
      cvtColor(imageC, imageC, CV_BGR2RGB); 
      glHint(GL_PERSPECTIVE_CORRECTION_HINT,GL_NICEST); 
      glPixelStorei(GL_UNPACK_ALIGNMENT, 1); 
      glBindTexture(GL_TEXTURE_2D, textureC); 
      glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR); 
      glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR); 
      //glTexImage2D(GL_TEXTURE_2D, 0, 4,image.cols, image.rows, 0, GL_RGB,GL_UNSIGNED_BYTE, image.data); 
      gluBuild2DMipmaps(GL_TEXTURE_2D, GL_RGB, imageC.cols, imageC.rows, GL_RGB, GL_UNSIGNED_BYTE, imageC.data); 
     } 
     if (flagB ==1){ 
      cvtColor(imageB, imageB, CV_BGR2RGB); 
      glHint(GL_PERSPECTIVE_CORRECTION_HINT,GL_NICEST); 
      glPixelStorei(GL_UNPACK_ALIGNMENT, 1); 
      glBindTexture(GL_TEXTURE_2D, textureB); 
      glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR); 
      glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR); 
      //glTexImage2D(GL_TEXTURE_2D, 0, 4,image.cols, image.rows, 0, GL_RGB,GL_UNSIGNED_BYTE, image.data); 
      gluBuild2DMipmaps(GL_TEXTURE_2D, GL_RGB, imageB.cols, imageB.rows, GL_RGB, GL_UNSIGNED_BYTE, imageB.data); 
     } 

제가 언급이 난에서 (if(flagC==1){...}if(flagB==1){...} 블록 바꾸면 이 방식으로 C 문자가있는 이미지는 이미지 - 텍스처 변환의 마지막 단계입니다.), 제 큐브는 C 문자로만 처리됩니다.

왜 이상한 행동입니까? 내가 Windows7의의 64 및 OpenGL에서 작동

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 
    glEnable(GL_TEXTURE_2D); 

glMatrixMode (GL_PROJECTION); 
glLoadIdentity(); 
gluOrtho2D(0, WIDTH, HEIGHT, 0); 

glMatrixMode(GL_MODELVIEW); 
glLoadIdentity(); 

if(flagA==1){ 
    glBindTexture(GL_TEXTURE_2D, textureA); 
    glBegin(GL_QUADS); 
    glTexCoord2f(0.0f, 0.0f); glVertex2f((GLfloat)((A[3].x)),(GLfloat)(A[3].y)); 
    glTexCoord2f(1.0f, 0.0f); glVertex2f((GLfloat)((A[0].x)),(GLfloat)(A[0].y)); 
    glTexCoord2f(1.0f, 1.0f); glVertex2f((GLfloat)((A[1].x)),(GLfloat)(A[1].y)); 
    glTexCoord2f(0.0f, 1.0f); glVertex2f((GLfloat)((A[2].x)),(GLfloat)(A[2].y)); 
    glEnd(); 
    } 
    if(flagB==1){ 
    glBindTexture(GL_TEXTURE_2D, textureB); 
    glBegin(GL_QUADS); 
    glTexCoord2f(0.0f, 0.0f); glVertex2f((GLfloat)((B[3].x)),(GLfloat)(B[3].y)); 
    glTexCoord2f(1.0f, 0.0f); glVertex2f((GLfloat)((B[0].x)),(GLfloat)(B[0].y)); 
    glTexCoord2f(1.0f, 1.0f); glVertex2f((GLfloat)((B[1].x)),(GLfloat)(B[1].y)); 
    glTexCoord2f(0.0f, 1.0f); glVertex2f((GLfloat)((B[2].x)),(GLfloat)(B[2].y)); 
    glEnd(); 
    } 
    if(flagC==1){ 
    glBindTexture(GL_TEXTURE_2D, textureC); 
    glBegin(GL_QUADS); 
    glTexCoord2f(0.0f, 0.0f); glVertex2f((GLfloat)((C[3].x)),(GLfloat)(C[3].y)); 
    glTexCoord2f(1.0f, 0.0f); glVertex2f((GLfloat)((C[0].x)),(GLfloat)(C[0].y)); 
    glTexCoord2f(1.0f, 1.0f); glVertex2f((GLfloat)((C[1].x)),(GLfloat)(C[1].y)); 
    glTexCoord2f(0.0f, 1.0f); glVertex2f((GLfloat)((C[2].x)),(GLfloat)(C[2].y)); 
    glEnd(); 
    } 

: 결과를 표시하기 위해

, 나는이 코드를 사용합니다.

답변

0

렌더링 코드가 보이지 않습니다.

어딘가에 작성하여 텍스처 ID를 생성 했습니까?

glGenTextures(1, &textureA); 
glGenTextures(1, &textureB); 
glGenTextures(1, &textureC); 

큐브를 렌더링 할 때이 글을 작성 했습니까?

glGenTextures(1, textureA); 
glGenTextures(1, textureB); 
glGenTextures(1, textureC); 

그것은해야한다 :

glBindTexture(GL_TEXTURE_2D, textureA); 
// Draw the A face 

glBindTexture(GL_TEXTURE_2D, textureB); 
// Draw the B face 

glBindTexture(GL_TEXTURE_2D, textureC); 

// 당신은 무엇을하고있는 것은 인 C면

+0

답변을 업데이트했습니다. – Cristina1986

0

을 그립니다

glGenTextures(1, &textureA); 
glGenTextures(1, &textureB); 
glGenTextures(1, &textureC); 

나는 문제가 변수 때문에 일어나는 가정 textureA , textureB와 textureC는 유효한 값을 얻지 못하기 때문에 glBindTexture 호출은 아무것도하지 않습니다 (비록 나는 당신이 세분화 오류가 있어야한다고 생각합니다).

관련 문제