OpenGL ES 2.0は拡張機能を使用して3次元テクスチャをサポートしていますが、このタイプの拡張機能は多くのデバイスでサポートされていません。だから、私はtriyngで3Dテクスチャの代わりに2Dテクスチャを使用しています。まず、3Dテクスチャデータを2次元テクスチャのアトラスに疲れさせました。たとえば、128x128x4の3Dテクスチャの代わりに、4つの2Dテクスチャ(128x128)を含む2Dテクスチャアトラスがあります。フラグメントシェーダは、次のようになります:OpenGL ES 2.0で3dテクスチャデータを2次元テクスチャでレンダリングするには?
precision mediump float;
uniform sampler2D s_texture;
uniform vec2 2DTextureSize;
uniform vec3 3DTextureSize;
varying vec3 texCoords;
vec2 To2DCoords(vec3 coords)
{
float u = coords.x + 3DTextureSize.x*(coords.z - 2DTextureSize.x *floor(coords.z/2DTextureSize.x));
float v = coords.y + 3DTextureSize.y*floor(coords.x/2DTextureSize.x);
return vec2(u,v);
}
void main()
{
gl_FragColor = texture2D(s_texture,To2DCoords(texCoords));
}
方法To2DCoordsはで発見アルゴリズムに触発さ:http://http.developer.nvidia.com/GPUGems3/gpugems3_ch29.html
問題がでeverytingが3Dテクスチャと比較すると、めちゃくちゃされてレンダリングすることです。だから私は間違っているの?
はご回答いただきありがとうございます。同じ結果が出ているようだ。しかし、私はTo2DCoordsメソッドを変更してより良い結果を得ました。 – Lucian