如何从3D纹理绘制2D纹理

时间:2014-07-15 14:13:10

标签: opengl textures opengl-3

我有一个2D游戏,我想使用3D纹理进行雾化以使其动画....但是,我不想要显示整个3D纹理,我只想要部分在Z 0处的纹理。

我该怎么做?

2 个答案:

答案 0 :(得分:1)

3D纹理与2D纹理类似。您使用glTexImage3D()初始化纹理,将其绑定到sampler3D,然后使用texture()在片段着色器中访问它。

//fog.frag
uniform sampler3D fog;
uniform float z;

in vec2 texCoord;

void main(){
    vec4 color = texture(fog, vec3(texCoord, z));
    ...
}

答案 1 :(得分:0)

嗯,您使用纹理坐标来访问纹理,因此您可以使用thrid组件来选择"层"。

我不知道您要定位的OpenGL版本。对于非常旧的版本并使用固定功能的pipleline,您可以像使用2D纹理一样启用3D纹理,并且可以使用纹理矩阵glMatrixMode(GL_TEXTURE))哟添加一些沿z轴转换。这样,您可以像以前一样使用2D texcoords,并且可以通过修改所述矩阵来简单地选择图层。

但是,我强烈建议您不要将3D纹理用于该用例,而是 2D数组纹理。但是,要这样做,您必须使用着色器,并通过着色器选择纹理图层非常容易。