【发布时间】:2013-09-03 19:51:03
【问题描述】:
我正在开发一个暂时依赖 3D 纹理的 Unity3D 项目。
问题是,Unity 只允许 Pro 用户使用 Texture3D。因此,我正在寻找 Texture3D 的替代品,可能是一维纹理(尽管 Unity 本身不可用),它在着色器中被解释为 3 维(使用 3D 纹理)。
有没有办法在(最好)保留亚像素信息的同时做到这一点?
(添加GLSL和Cg标签,因为这里是问题的核心)
编辑:这里也解决了这个问题:webgl glsl emulate texture3d 然而,这还没有完成并且工作正常。
编辑:目前我忽略了适当的亚像素信息。因此,感谢任何有关将 2D 纹理转换为包含 3D 信息的帮助!
编辑:我收回了我自己的答案,因为它还不够:
float2 uvFromUvw( float3 uvw ) {
float2 uv = float2(uvw.x, uvw.y / _VolumeTextureSize.z);
uv.y += float(round(uvw.z * (_VolumeTextureSize.z - 1))) / _VolumeTextureSize.z;
return uv;
}
初始化为 Texture2D(volumeWidth, volumeHeight * volumeDepth)。
大部分时间它都能正常工作,但有时它会显示错误的像素,这可能是因为它正在获取亚像素信息。我怎样才能解决这个问题?限制输入不起作用。
【问题讨论】: