C++ 以重复模式绑定纹理

C++ 以重复模式绑定纹理,c++,opengl,textures,octree,C++,Opengl,Textures,Octree,我试图在OpenGL中以3D纹理存储一个八叉树,以便使用Cg在GPU上使用,这是GPU Gems 2中的一章。然而,我得到的结果是不正确的。我想这是因为我是如何创建八叉树的 在该章的附录中,它说“如果我们以重复模式(GL_repeat)绑定间接池纹理(八叉树纹理)…” 这仅仅意味着将过滤器和包装设置为重复,还是我需要做其他事情?这是到目前为止我的代码 glGenTextures(1, &octree_texture); glBindTexture(GL_TEXTURE_3D, octre

我试图在OpenGL中以3D纹理存储一个八叉树,以便使用Cg在GPU上使用,这是GPU Gems 2中的一章。然而,我得到的结果是不正确的。我想这是因为我是如何创建八叉树的

在该章的附录中,它说“如果我们以重复模式(GL_repeat)绑定间接池纹理(八叉树纹理)…”

这仅仅意味着将过滤器和包装设置为重复,还是我需要做其他事情?这是到目前为止我的代码

glGenTextures(1, &octree_texture);
glBindTexture(GL_TEXTURE_3D, octree_texture);
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_MAG_FILTER, GL_REPEAT);
glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_MIN_FILTER, GL_REPEAT);
glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_WRAP_T, GL_REPEAT);
glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_WRAP_R, GL_REPEAT);
glTexImage3D(GL_TEXTURE_3D, 0, GL_RGBA, WIDTH, HEIGHT, DEPTH, 0, GL_RGBA, GL_UNSIGNED_BYTE, octreeData);

感谢您的帮助:)

过滤器不能重复,这将生成GL错误,只有包裹模式可以是GL_重复,这可能就是本书的意思。

啊,好的,一定是这样。仍然不起作用,但至少我可以消除这一潜在原因!谢谢@Benzino您是否将最小/最大过滤器设置为GL_NEAREST或GL_LINEAR?我当前将其设置为GL_NEAREST。我开始认为存储在纹理中的数据顺序是不正确的,而不是实际的纹理过滤器和参数,但要深入研究GPU Gems,你至少应该具备一些实用3D图形的基本知识,并知道包装模式和过滤模式之间的区别。我确实知道3D图形,我只是没有在OpenGL环境中工作过那么多。我有其他一切设置,GPU光线投射和CPU八叉树,只需要在纹理中正确存储八叉树。当然,很明显,过滤器不应该设置为重复。漫长的一天,我没有好好思考D