Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Opengl 在pyglet中使用大型3D纹理_Opengl_Glsl_Textures_Pyglet_3d Texture - Fatal编程技术网

Opengl 在pyglet中使用大型3D纹理

Opengl 在pyglet中使用大型3D纹理,opengl,glsl,textures,pyglet,3d-texture,Opengl,Glsl,Textures,Pyglet,3d Texture,我试图用预先计算的速度向量场来做一些GLSL粒子的东西。这些矢量场存储为~13 1024x170浮动纹理,每个纹理对应于z平面中的不同切片。理想情况下,我希望将其加载为尺寸为1024x170x13的3D纹理,以允许在着色器中进行自动插值,但我的本地实现提供了256的GL_MAX_3D_texture_大小,这意味着如果我正确理解每个维度中的最大大小是256,那么这将不起作用 因此,我的下一步是尝试使用GL_纹理_2D_阵列,并在着色器中的平面之间进行插值。不幸的是,pyglet似乎没有公开此功能

我试图用预先计算的速度向量场来做一些GLSL粒子的东西。这些矢量场存储为~13 1024x170浮动纹理,每个纹理对应于z平面中的不同切片。理想情况下,我希望将其加载为尺寸为1024x170x13的3D纹理,以允许在着色器中进行自动插值,但我的本地实现提供了256的GL_MAX_3D_texture_大小,这意味着如果我正确理解每个维度中的最大大小是256,那么这将不起作用

因此,我的下一步是尝试使用GL_纹理_2D_阵列,并在着色器中的平面之间进行插值。不幸的是,pyglet似乎没有公开此功能??:

Traceback (most recent call last):
  File "particle_trace.py", line 67, in <module>
    load_vectortex3d(f, tex)
  File "particle_trace.py", line 56, in load_vectortex3d
    glBindTexture(GL_TEXTURE_2D_ARRAY, tex)
NameError: global name 'GL_TEXTURE_2D_ARRAY' is not defined

我的下一步是分别绑定所有纹理,将它们单独传递给着色器,然后在那里进行计算。但是我找错树了吗?肯定有更好的方法可以做到这一点。

我当然建议不要收集单个纹理,而是将所有13个纹理组合成一个纹理,纹理沿t方向堆叠。在着色器中,可以尝试对纹理采样两次,修改t坐标以索引到适当的图像中。当然,如果您使用双线性过滤模式,此技术并不理想,因为您会遇到沿图像边缘采样的问题,例如。,沿着水平边缘的边界。您是否尝试过将Pyglet升级到一个在过去5年中更新过的版本,这就是自从阵列纹理添加到核心OpenGL以来的时间?或者可能使用的Python OpenGL实现甚至远比OpenGL最新?@radical7感谢您的提示,这当然比使用单个纹理要好得多。@Nicolas我使用的是我的软件包管理器提供的pyglet 1.1.4,它似乎是最新的稳定版本。文档声明它公开了所有OpenGL函数。这是否意味着我的driver nouveau不支持此功能,但如果我在不同的机器/交换机驱动程序上使用相同的代码,它会起作用?