1
ゲームとプロトタイプを作成するためにUnityとXbox Kinectを使用しようとしています。RGB565テクスチャに格納された16ビット整数値を
キネクトの深度カメラは、16ビットのuint値のバイト[]を返します。 私は現在Unity Texture2Dオブジェクトを作成しており、フォーマットをRGB565として指定してから、LoadRawTextureData関数を使用してフォーマットします。これは正常に動作し、Unity環境内では、実行時にテクスチャが作成され更新されていることがわかります。
しかし、シェーダでテクスチャをサンプリングすると、エンコードされた値を元の深さintにデコードする方法がわかりません。私はいくつかのことを試みましたが、残念なことに運がない、私は誰かが正しい方向に私を向けることができると思っていました。
float decodeFloatRGB565(float4 enc) {
//... decode value ...
}
// The vertex shader - handles the position of the vertex
v2f vert(appdata v) {
v2f o;
o.pos = mul(UNITY_MATRIX_MVP, v.vertex);
o.uv = v.uv;
float4 depthRGBA = tex2Dlod(_DepthTex, float4(v.uv,0.0,0.0));
float val = decodeFloatRGB565(depthRGBA);
//...scale to value between 0 and 255...
//...scale to value between 0 and 1...
o.color = float4(val,val,val,0.0);
return o;
}
// The fragment shader - handles the color of vertex
fixed4 frag (v2f i) : SV_Target {
return i.color;
}
大変助かりました。
ご使用のプラットフォームでサポートされていないR16テクスチャフォーマットですか? – Quinchilion
私はそれが信じている - 私はそれがより簡単になると思ったので、私は実際にそれを最初に試しました。私はそれが赤いチャネルのすべての16ビットであることを理解している?私がサンプラーをテクスチャに適用すると、アルファチャンネルにデータがあるように見えました - 私は変わったことをしているに違いないと思います。 –
最近隣のサンプリングをしていない限り、エンコードされた値を 'Sample'(または' tex2D')しません。補間された値は無意味です。 – MooseBoys