में चार बाइट पैक करें मैं एक शेडर (एचएलएसएल) लिख रहा हूं, और मुझे R32 प्रारूप में रंग मान पैक करने की आवश्यकता है। मुझे R8G8B8A8 प्रारूप में एक फ्लोट पैक करने के लिए कोड के विभिन्न टुकड़े मिल गए हैं, लेकिन उनमें से कोई भी रिवर्स में काम नहीं कर रहा है। मैं एसएम 3.0 को लक्षित कर रहा हूं, इसलिए (afaik) बिट ऑपरेशंस एक विकल्प नहीं है।एक फ्लोट
float4 color = ...; // Where color ranges from 0 -> 1
float packedValue = pack(color);
किसी को भी पता है कि कैसे यह करने के लिए:
यह कुल मिलाकर, मैं यह करने के लिए सक्षम होना चाहिए?
अद्यतन
मैं कुछ प्रगति मिल गया है ... शायद इस प्रश्न को स्पष्ट करने में मदद मिलेगी।
मेरे अस्थायी समाधान है जैसे:
const int PRECISION = 64;
float4 unpack(float value)
{
float4 color;
color.a = value % PRECISION;
value = floor(value/PRECISION);
color.b = value % PRECISION;
value = floor(value/PRECISION);
color.g = value % PRECISION;
value = floor(value/PRECISION);
color.r = value;
return color/(PRECISION - 1);
}
float pack(float4 color)
{
int4 iVal = floor(color * (PRECISION - 1));
float output = 0;
output += iVal.r * PRECISION * PRECISION * PRECISION;
output += iVal.g * PRECISION * PRECISION;
output += iVal.b * PRECISION;
output += iVal.a;
return output;
}
मैं मूल रूप से कर रहा हूँ ... नाटक मैं पूर्णांक प्रकार उपयोग कर रहा हूँ: रों
अनुमान के माध्यम से और जाँच, 64 सबसे अधिक संख्या में, जबकि अभी भी बनाए रखने मैं इस्तेमाल कर सकते हैं था एक [0 ... 1] रेंज। दुर्भाग्य से, कि भी मतलब है मैं कुछ परिशुद्धता खो रहा हूँ - 8.
यह अंततः पूछा जा रहा है, इसलिए आप इसे साथ भी प्राप्त कर सकते हैं :) आपको एक पूर्णांक प्रारूप के बजाय R32 का उपयोग क्यों करना है? – eodabash
हे ... मुझे पता था कि यह आ रहा था, लेकिन फिर भी ... वास्तविकता में, मैं R32G32B32A32 का उपयोग कर रहा हूं, मैंने केवल आर 32 को सरल बनाने के लिए कहा है। मैं बस यह पता लगाने की कोशिश कर रहा हूं कि मैं एक ही रेंडर लक्ष्य में यथासंभव अधिक जानकारी कैसे डाल सकता हूं। बेशक, मुझे अभी भी कुछ माप करने की ज़रूरत है, लेकिन मुझे लगता है कि मेरे सभी डेटा को एक सिंगल रेंडर लक्ष्य में बदलना एमआरटी के माध्यम से चार का उपयोग करने से थोड़ा सस्ता है। – YellPika
मैं यह देखने के लिए उत्सुक हूं कि इस प्रश्न के लिए लोग क्या जवाब दे सकते हैं। – Olhovsky