0
我嘗試2個紋理應用到我的水平的代碼編譯,但水平出來完全地白,OpenGL紋理
struct Image
{
unsigned long size_x;
unsigned long size_y;
char *data;
}
typedef struct Image Image;
const int textureCount = 2;
Image myTextureData[textureCount];
GLuint theTexture[textureCount];
char* textureFilenames0[textureCount] = {"road.bmp"};
char* textureFilenames1[textureCount] = {"building.bmp"};
質地裝載機類
void textureLoader()
{
/*glPixelStorei(GL_UNPACK_ALIGNMENT, 1);*/
glGenTextures(2, theTexture);
glBindTexture(GL_TEXTURE_2D, theTexture[0]);
for(int k=0; k < textureCount; k++)
{
if(!imageLoader(textureFilenames0[k], &myTextureData[k]))
exit(1);
glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_REPEAT);
glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR_MIPMAP_NEAREST);
gluBuild2DMipmaps(GL_TEXTURE_2D, 3, myTextureData[k].size_x, myTextureData[k].size_y, GL_RGB, GL_UNSIGNED_BYTE, myTextureData[k].data);
glBindTexture(GL_TEXTURE_2D, theTexture[1]);
for(int k=0; k < textureCount; k++)
{
if(!imageLoader(textureFilenames1[k], &myTextureData[k]))
exit(1);
glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_REPEAT);
glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR_MIPMAP_NEAREST);
gluBuild2DMipmaps(GL_TEXTURE_2D, 3, myTextureData[k].size_x, myTextureData[k].size_y, GL_RGB, GL_UNSIGNED_BYTE, myTextureData[k].data);
}
}
處理配對,但程序如何知道要調用哪個文件以及我在哪裏調用glEnable(GL_TEXTURE_2D); – rich 2011-03-29 15:06:43
@rich:你現在的代碼是錯誤的。您需要綁定紋理#k,然後加載文件#k。現在你正在將file0#k加載到紋理#0中,你的循環尋找兩個文件名,只有一個文件名,所以你最終使用了一個NULL指針並且在你的紋理之上加載了一個不存在的文件。我不知道你的紋理加載器在傳遞NULL文件名時會做什麼。在繪製紋理幾何體之前,需要完成「glEnable(GL_TEXTURE_2D)」。 – 2011-03-29 15:21:14
您可以使用glBindTexture(GL_TEXTURE_2D,a_texture_ID)來告訴OpenGL使用哪個紋理。不幸的是,在上面的代碼中,使用glGenTextures分配的紋理ID似乎置於單個索引全局變量中。技術上來說,textureLoader應該返回紋理的值,以便稍後在渲染時綁定它。 – datenwolf 2011-03-29 15:21:31