2014-03-06 46 views
1

UPDATEOpenGL的:質地裝載但不能應用於


我使用glutSolidCube停止和啓動手動應用紋理。仍然無濟於事。任何想法,如果不是的話,你能指點我一個紋理成功應用於立方體的例子嗎?

glRotatef(180, 0.0f, 1.0f, 0.0f); 

glBindTexture(GL_TEXTURE_CUBE_MAP, texture); 

glTranslatef(pos_x, 0, pos_z); 

int size = 1; 

// Begin Rending 
glBegin(GL_QUADS); 

// Face 1 
glNormal3f(0.0f, 0.0f, 1.0f); 

glTexCoord2f(0.0f, 0.0f); 
glVertex3f(size, size,-size); 

glTexCoord2f(1.0f, 0.0f); 
glVertex3f(-size, size,-size); 

glTexCoord2f(1.0f, 1.0f); 
glVertex3f(-size, size, size); 

glTexCoord2f(0.0f, 1.0f); 
glVertex3f(size, size, size);  

// Face 2 

glNormal3f(0.0f, 0.0f,-1.0f); 

glTexCoord2f(0.0f, 0.0f); 
glVertex3f(size,-size, size);  

glTexCoord2f(1.0f, 0.0f); 
glVertex3f(-size,-size, size); 

glTexCoord2f(1.0f, 1.0f); 
glVertex3f(-size,-size,-size); 

glTexCoord2f(0.0f, 1.0f); 
glVertex3f(size,-size,-size); 

// Face 3 


glTexCoord2f(0.0f, 0.0f); 
glVertex3f(size, size, size);  

glTexCoord2f(1.0f, 0.0f); 
glVertex3f(-size, size, size); 

glTexCoord2f(1.0f, 1.0f); 
glVertex3f(-size,-size, size);  

glTexCoord2f(0.0f, 1.0f); 
glVertex3f(size,-size, size); 

// Face 4 

glNormal3f(0.0f,-1.0f, 0.0f); 

glTexCoord2f(0.0f, 0.0f); 
glVertex3f(size,-size,-size); 

glTexCoord2f(1.0f, 0.0f); 
glVertex3f(-size,-size,-size); 

glTexCoord2f(1.0f, 1.0f); 
glVertex3f(-size, size,-size); 

glTexCoord2f(0.0f, 1.0f); 
glVertex3f(size, size,-size); 

// Face 5 

glNormal3f(1.0f, 0.0f, 0.0f); 

glTexCoord2f(0.0f, 0.0f); 
glVertex3f(-size, size, size);  

glTexCoord2f(1.0f, 0.0f); 
glVertex3f(-size, size,-size);  

glTexCoord2f(1.0f, 1.0f); 
glVertex3f(-size,-size,-size); 

glTexCoord2f(0.0f, 1.0f); 
glVertex3f(-size,-size, size); 

// Face 6 

glNormal3f(1.0f, 0.0f, 0.0f); 

glTexCoord2f(0.0f, 0.0f); 
glVertex3f(size, size,-size); 

glTexCoord2f(1.0f, 0.0f); 
glVertex3f(size, size, size); 

glTexCoord2f(1.0f, 1.0f); 
glVertex3f(size,-size, size); 

glTexCoord2f(0.0f, 1.0f); 
glVertex3f(size,-size,-size);  

glEnd(); 

我正在用OpenGL +轉運蛋白一個簡單的基於體素的比賽,我在與加載紋理並將其應用到一個立方體的麻煩。紋理在這裏創造:

texture = SOIL_load_OGL_cubemap (
    "block.png", 
    "block.png", 
    "block.png", 
    "block.png", 
    "block.png", 
    "block.png", 
    SOIL_LOAD_RGB, 
    SOIL_CREATE_NEW_ID, 
    SOIL_FLAG_MIPMAPS 
); 

而且在這裏抽籤的方法適用於:

glEnable(GL_TEXTURE_GEN_S); //enable texture coordinate generation 
glEnable(GL_TEXTURE_GEN_T); 
glBindTexture(GL_TEXTURE_2D, texture); 
glutSolidCube(2); 
glDisable(GL_TEXTURE_GEN_S); //enable texture coordinate generation 
glDisable(GL_TEXTURE_GEN_T); 

但是當我運行應用程序,我得到一個堅實的白色立方體依然。

http://i.snag.gy/ahxUt.jpg

我思念的東西很明顯?

+0

你'glEnable(GL_TEXTURE_CUBE_MAP)''?爲什麼在'glBindTexture()'中使用'GL_TEXTURE_2D'目標而不是'GL_TEXTURE_CUBE_MAP'? – genpfault

+0

嘗試用新舊解決方案,沒有運氣。 –

+0

您是否啓用2D紋理? (glEnable(GL_TEXTURE_2D))。另外,我並不熟悉SOIL,但您可能應該只使用2D紋理,而不是立方體貼圖。因此,您對SOIL_load_OGL_cubemap的調用可能不正確。環顧四周,看看是否有SOIL函數會加載常規2D紋理。 – redsoxfantom

回答

0

glutSolidCube不包含uv座標,因此OpenGL無法知道應該在何處應用紋理。我相信只有glutSolidTeapot可以用這種方式進行紋理處理嗎?但不知道。

無論如何,沒有任何方法可以輕鬆地將glutSolidCube紋理化爲自動生成uv座標。我不知道如何去做這件事,但這link可能會有所幫助。如果您不想處理自動生成座標,那麼只需手動繪製立方體並在其中指定uvs。

+0

更新了問題。 –

相關問題