2013-05-05 39 views
0

我有這個立方體,我想用不同的圖像來覆蓋它的每一面,其中出現一個字母。用不同的圖像覆蓋立方體的每一面 - OpenGL

enter image description here

我的問題是立方體由相同的圖像覆蓋,你可以在下面的圖片看。 但我希望字母A出現在頂部,B在左側,C在右側。

enter image description here

以轉化/變換圖像(字母A,B,C)中的紋理我使用此代碼:

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(flagB==1){...}if(flagC==1){...}(在這種方式與C字母圖像是最後的圖像紋理轉換過程中),我的立方體只有C字母覆蓋。

爲什麼這種奇怪的行爲?

爲了顯示結果,我用這個代碼:

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(); 
    } 

我的windows7上的x64和OpenGL工作。

回答

0

我們看不到您的渲染代碼。

你是否在某處寫了這個文件來生成紋理ID?

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 2013-05-05 16:42:04

0

什麼,你正在做的是:

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

它應該是:

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

我認爲這個問題是因爲變量textureA ,textureB和textureC不會得到有效的值,因此glBindTexture調用什麼也不做(儘管如此我認爲你應該得到分段錯誤)。

相關問題