Я пытаюсь использовать Unity и Xbox Kinect для создания игры/прототипа.декодирование 16-битное значение int, хранящееся в текстуре RGB565
Камера глубины на kinect возвращает байт [] из 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 бит в красном канале? Когда я применил пробоотборник к текстуре, там, казалось, были данные в альфа-канале - я, должно быть, делал что-то странное, я думаю. –
Dont 'Sample' (или' tex2D') зашифрованное значение, если вы не выполняете выборку ближайших соседей. Интерполированное значение не имеет смысла. – MooseBoys