2012年6月27日 星期三

如何在VBO中使用多個texture

因為Graphic Programming的關係……學了OpenGL
然後之前為了交Assignment,研究這個研究老半天……結果超簡單到讓我想翻桌……(ノ ̄ー ̄)ノ彡┴─┴


嘛……首先當然是設定texture……相關資訊可參考Nehe的教學
const GLuint NUM_OF_TEXTURES = 1;
GLuint texture[NUM_OF_TEXTURES];

glGenTextures(NUM_OF_TEXTURES, texture ); //set the numbers of textures.
glBindTexture( GL_TEXTURE_2D, texture[0] );
glTexImage2D( ... );
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR );
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR );


然後設定VBO……
//首先設定點……
typedef struct{ ... }Vertex;

//然後設定你的obj……
typedef struct{ ... }Object;
Object obj;

//點設定完後,設置VBO的內容(相關內容可參考Nehe的教學……雖然對方的code用的openGL版本有點舊,不過差別不大……
glGenBuffers(1, ...);
glBindBuffer(GL_ARRAY_BUFFER, ...);
glBufferData(GL_ARRAY_BUFFER, ...);


接下來就是繪製了……
glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState( GL_TEXTURE_COORD_ARRAY );
glBindBuffer(GL_ARRAY_BUFFER, ...);
glVertexPointer(4, GL_FLOAT, ...);
glNormalPointer(GL_FLOAT, ...);
glColorPointer(4, GL_FLOAT, ...);
/*
 * 上面都是基本設定(除了texture)……
 * 接下來設定texture
 */
glBindTexture( GL_TEXTURE_2D, texture[0] ); //設定說你要使用哪個texture(因為texture是個Array,若你有多個obj……就分別使用不同的texture,例如:「glBindTexture( GL_TEXTURE_2D, texture[1] );」)
glTexCoordPointer(textureIndex, GL_FLOAT, ...);
}
glDrawArrays(GL_TRIANGLES, 0, ...); //將textuer的頂點資訊傳道GPU……

//Unbind Buffer
glFlush();


以上。要設定多個texture就設定多個texture,然後每次glBindTexture時選不同的texture id……

沒有留言:

張貼留言