我正嘗試使用OpenGL渲染紋理網格。目前,我的主要類持有包括一個狀態:將紋理映射到OpenGL中的頂點
std::vector<vec3d> vertices
std::vector<face> mesh
std::vector<vec3d> colors
vec3d
是三維向量的實現 - face
和一類抱着3個整數 - 沒有什麼特別的指向vertices
中頂點的索引。
到目前爲止,我變得我不網格紋理用下面的代碼(工作正常):
glShadeModel(params.smooth ? GL_SMOOTH : GL_FLAT);
glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_NORMAL_ARRAY);
/*This is my attempt to add the texture
*
*if (_colors.size() != 0) {
* cout << "Hello" << endl;
* glClientActiveTexture(GL_TEXTURE0);
* glEnableClientState(GL_TEXTURE_COORD_ARRAY);
* glTexCoordPointer(3,GL_FLOAT,0,&_colors[0].x);
}*/
glNormalPointer(GL_FLOAT,0,&normals[0].x);
glVertexPointer(3,GL_FLOAT,0,&vertices[0].x);
glDrawElements(GL_TRIANGLES,mesh.size()*3,GL_UNSIGNED_INT,&mesh[0].v1);
glDisableClientState(GL_VERTEX_ARRAY);
glDisableClientState(GL_NORMAL_ARRAY);
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
我的紋理存儲在colors
作爲花車的三元0和1之間的列表。然而,顏色不適用。我讀了很多紋理映射的例子,並試圖做同樣的事情,但沒有運氣。任何想法我做錯了什麼?
爲什麼你有3D紋理座標?當你使用2D紋理時,你還需要2D座標。 – BDL 2014-11-04 16:09:16
我的數組包含每個頂點的(R,G,B)顏色。 'colors [i]'表示顏色或'頂點[i]'。 – Dici 2014-11-04 16:10:13
然後你根本沒有使用紋理。你使用的是頂點顏色。 – BDL 2014-11-04 16:20:50