gpt4 book ai didi

c++ - 将纹理映射到 OpenGL 中的顶点

转载 作者:太空宇宙 更新时间:2023-11-04 11:25:48 30 4
gpt4 key购买 nike

我正在尝试使用 OpenGL 渲染带纹理的网格。目前,我的主类拥有一个状态,包括:

  • std::vector<vec3d> vertices
  • std::vector<face> mesh
  • std::vector<vec3d> colors

vec3d是 3D vector 的实现 - 没什么特别的 - 和 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 之间的 float 的三元组列表。但是,不应用颜色。我读了很多纹理贴图的例子,并试图做同样的事情,但没有成功。知道我做错了什么吗?

最佳答案

从您的评论可以看出,您使用了错误的 OpenGL 功能来实现您想要的。纹理意味着通过使用例如将二维图像粘贴到网格上。 uv 坐标。

您正在做的是在每个顶点上指定一种颜色,因此您需要启用 GL_COLOR_ARRAY 而不是 GL_TEXTURE_COORD_ARRAY 并为此使用相应的函数。

一个额外的提示:如果您是从头开始学习 OpenGL,您应该考虑只使用现代 OpenGL (3.2+)

回答最后一条评论:

Well, I read those colors from a texture file, that's what I meant. Is there a way to use such an array to display my mesh in color ?

是和否:执行此操作时您很可能得不到预期的结果。通常,纹理中会有多个像素应映射到面部。使用顶点颜色,您只能为每个顶点应用一个颜色值,该颜色值插值到三角形上。看看如何将纹理应用于网格,您应该能够在 Internet 上找到很多资源。

关于c++ - 将纹理映射到 OpenGL 中的顶点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26739667/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com