[英]Mapping a texture to vertices in OpenGL
我正在嘗試使用OpenGL渲染紋理化網格。 當前,我的主類的狀態為:
std::vector<vec3d> vertices
std::vector<face> mesh
std::vector<vec3d> colors
vec3d
是3D向量的一種實現(沒什么特別的),並且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之間的三重浮點列表。但是,沒有應用顏色。 我閱讀了許多紋理映射的示例,並嘗試這樣做,但是沒有運氣。 有什么想法我做錯了嗎?
從您的評論可以看出,您使用了錯誤的OpenGL功能來實現所需的功能。 紋理化是指通過使用例如uv坐標將2d圖像粘貼到網格上。
您要做的是在每個頂點上指定一種顏色,因此您需要啟用GL_COLOR_ARRAY而不是GL_TEXTURE_COORD_ARRAY並為此使用相應的功能。
另一提示:如果要從頭開始學習OpenGL,則應考慮僅使用現代OpenGL(3.2+)
要回答最后一條評論:
好吧,我從紋理文件中讀取了這些顏色,這就是我的意思。 有沒有辦法使用這樣的數組以彩色顯示我的網格?
是和否:執行此操作時,您極有可能無法獲得預期的結果。 通常,紋理中將有多個像素應映射到一張臉。 使用頂點顏色時,每個頂點只能應用一種顏色值,該值會插值到三角形上。 看看如何將紋理應用於網格,您應該能夠在Internet上找到很多資源。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.