opengl中的完美(3D)纹理映射

opengl中的完美(3D)纹理映射,opengl,grid,mapping,3d-texture,Opengl,Grid,Mapping,3d Texture,我试图在opengl中创建一个简单的3D数组可视化。三维数组包含颜色值。 为了实现这一点,我可以画很多立方体,给它们纹理坐标以指向正确的纹理。嗯,我试过了,效果不错。 但我还需要更多,实现我想要的唯一方法是,当平面打开时,在另一个轴方向的每个网格上绘制完整的二维平面,这是6个方向。 例如:我从-15到+15,在Z坐标-15到+15上画XY平面,也画背面XY平面,YZ平面,背面YZ平面。。。 这样,我就可以在每个角点放置3D纹理坐标,然后插值就可以了 我将数组坐标作为纹理坐标,介于0和32之间,原

我试图在opengl中创建一个简单的3D数组可视化。三维数组包含颜色值。 为了实现这一点,我可以画很多立方体,给它们纹理坐标以指向正确的纹理。嗯,我试过了,效果不错。 但我还需要更多,实现我想要的唯一方法是,当平面打开时,在另一个轴方向的每个网格上绘制完整的二维平面,这是6个方向。 例如:我从-15到+15,在Z坐标-15到+15上画XY平面,也画背面XY平面,YZ平面,背面YZ平面。。。 这样,我就可以在每个角点放置3D纹理坐标,然后插值就可以了

我将数组坐标作为纹理坐标,介于0和32之间,原因是,在着色器中,我可以将纹理坐标设置为地板,然后将其除以32,以获得网格上每个像素的精确纹理

但是,唉。。。像素着色器不断怀疑选择,一个像素映射到与下一个像素不同的纹理,而下一个像素再次正确映射

我曾经通过向浮点值添加0.5或0.35来解决这类问题,以确保浮点值在所有硬件平台上都被正确舍入,但对我来说这仍然是一个难题。而且,它对3D纹理不起作用

有人能告诉我怎么处理吗

有人能告诉我怎么处理吗

你遇到了臭名昭著的围栏张贴问题。简单地说,纹理坐标0和1不是像素中心,而是像素边界。看看这个简单的草图

  | 0 | 1 | 2 | 3 |
  ^               ^
 0.0             1.0

  0   1   2   3   4
 --- --- --- --- ---
  4   4   4   4   4
所以要解决像素,我说纹理的0,比如说4像素宽,你必须使用纹理坐标

(i/N + (i+1)/N)/2 = i/2N + (i+1)/2N = (2i + 1) / 2N = (i + 0.5)/N
因此,添加0.5不是一个黑客。但是,在着色器中,可以仅使用texelFetch以绝对像素表示纹理,而不是采样坐标。但是,您必须自己实现过滤

有人能告诉我怎么处理吗

你遇到了臭名昭著的围栏张贴问题。简单地说,纹理坐标0和1不是像素中心,而是像素边界。看看这个简单的草图

  | 0 | 1 | 2 | 3 |
  ^               ^
 0.0             1.0

  0   1   2   3   4
 --- --- --- --- ---
  4   4   4   4   4
所以要解决像素,我说纹理的0,比如说4像素宽,你必须使用纹理坐标

(i/N + (i+1)/N)/2 = i/2N + (i+1)/2N = (2i + 1) / 2N = (i + 0.5)/N

因此,添加0.5不是一个黑客。但是,在着色器中,可以仅使用texelFetch以绝对像素表示纹理,而不是采样坐标。不过,您必须自己实施过滤。

尤其是您的texelFetch选项非常有用。事实上,我并不知道它的存在,并且一直在想为什么没有1D和3D纹理的纹理矩形样式版本。特别是你的texelFetch选项非常有用。事实上,我并不知道它的存在,并且一直在想为什么没有1D和3D纹理的纹理矩形样式版本。