2015-05-14 123 views
1

嘗試使用OpenGL和SOIL完成基本紋理映射到曲面,但我不生成任何東西。使用SOIL映射紋理與OpenGL

GLuint textureID[5]; 

glutInitWindowPosition(0, 50); 
windowID[0] = glutCreateWindow("orthogonal projection, cubes"); 

glMatrixMode(GL_PROJECTION); 
glLoadIdentity(); 
glOrtho(-400, 400, -400, 400, -500, 500); 

glMatrixMode(GL_MODELVIEW); 
glLoadIdentity(); 

glutKeyboardFunc(Keyboard); 
glutDisplayFunc(DrawWindowOne); 

textureID[0] = SOIL_load_OGL_texture("assets/faceA.png", 
       SOIL_LOAD_AUTO, SOIL_CREATE_NEW_ID, SOIL_FLAG_INVERT_Y); 

void DrawWindowOne() 
{ 
    glClearColor(0.0, 0.0, 0.0, 0.0); 
    glClear(GL_COLOR_BUFFER_BIT); 

    glViewport(0, 0, 250, 250); 

    glMatrixMode(GL_MODELVIEW); 

    glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE); 

    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); 
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); 
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); 
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); 

    glEnable(GL_TEXTURE_2D); 

    glBindTexture(GL_TEXTURE_2D, textureID[0]); 

    glBegin(GL_QUADS); 
    glNormal3f(0.0, 0.0, 1.0); // front face 
    glTexCoord2f(0.0, 0.0);  glVertex3f(-a,-a, a); 
    glTexCoord2f(0.0, 1.0);  glVertex3f(-a, a, a); 
    glTexCoord2f(1.0, 1.0);  glVertex3f(a, a, a); 
    glTexCoord2f(1.0, 0.0);  glVertex3f(a,-a, a); 
    glEnd(); 

    glDisable(GL_TEXTURE_2D); 
} 

然而,臉部繪製藍色,我沒有紋理。我有第二個窗口,在這裏除了位置的唯一延異的是,我使用截,而不是正交

windowID[1] = glutCreateWindow("Perspective projection using glFrustum"); 

glMatrixMode(GL_PROJECTION); 
glLoadIdentity(); 
glFrustum(-60, 60, -60, 60, 60, 200); 
gluLookAt(0, 0, 120, 0, 0, 0, 0, 1, 0); 

和紋理繪製的罰款。

+0

假設紋理加載和多邊形繪製在代碼中的不同位置。前者在哪裏發生?也就是說,在你創建一個上下文之後? 'glGetError'會說什麼嗎? – imallett

+0

我有一個窗口初始化,然後我直接抓住紋理,其餘的順序在繪製函數。當我啓用我的第二個窗口時,我將打開窗口代碼,紋理呈現(即,我可以看到它在窗口2中調用相同的函數,但我需要它在窗口1中顯示) – Gnemlock

+0

嗯,在這一點可能是一個[SSCCE](http://sscce.org/)作爲pastebin鏈接會有用嗎?我不使用SOIL或GLUT,但從我記得這看起來是正確的。努力+1。 – imallett

回答

0

問題是,我一次加載紋理,在每個窗口初始化後需要加載它們以便可用於該窗口繪製代碼。

#pragma region Initialise Window One 
glutInitWindowPosition(0, 50); 
windowID[1] = glutCreateWindow("orthogonal projection, cubes"); 
glMatrixMode(GL_PROJECTION); 
glLoadIdentity(); 
glOrtho(-400, 400, -400, 400, -500, 500); 

glMatrixMode(GL_MODELVIEW); 
glLoadIdentity(); 

glutKeyboardFunc(Keyboard); 
glutDisplayFunc(DrawWindowOne); 
LoadTextures(); 
#pragma endregion 

#pragma region Initialise Window Two 
glutInitWindowPosition(0, 450); 
windowID[1] = glutCreateWindow("Perspective projection using glFrustum, ellipsoids"); 

glMatrixMode(GL_PROJECTION); 
glLoadIdentity(); 
glFrustum(-60, 60, -60, 60, 60, 200); 
gluLookAt(0, 0, 120, 0, 0, 0, 0, 1, 0); 

glMatrixMode(GL_MODELVIEW); 
glLoadIdentity(); 

glutKeyboardFunc(Keyboard); 
glutDisplayFunc(DrawWindowTwo); 
LoadTextures(); 
#pragma endregion