我有一个2D游戏,我想使用3D纹理进行雾化以使其动画....但是,我不想要显示整个3D纹理,我只想要部分在Z 0处的纹理。
我该怎么做?
答案 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数组纹理。但是,要这样做,您必须使用着色器,并通过着色器选择纹理图层非常容易。