2011-12-04 9 views
5

मैं एक शेडर वर्दी में ओपनटीके मैट्रिक्स 4 पास करने की कोशिश कर रहा हूं, लेकिन ऐसा लगता है कि GL.UniformMatrix4 के लिए उपयुक्त अधिभार नहीं है। अधिभार float या float[] या ref float स्वीकार करते हैं। इसी प्रकार मुझे मैट्रिक्स 4 इंस्टेंस को फ्लोट एरे में बदलने का कोई तरीका नहीं मिल रहा है - मैंने एक नमूना देखा है जो मैट्रिक्स 4 पर ToArray विधि का उपयोग करता है, लेकिन यह उस वितरण में मौजूद प्रतीत नहीं होता है जिसका मैं उपयोग कर रहा हूं।मोनो टच ओपनटीके और यूनिफॉर्ममैट्रिक्स 4

निश्चित रूप से मुझे कुछ आसान याद आ रहा है क्योंकि यह एक शेडर को मॉडल/व्यू/प्रक्षेपण मैट्रिक्स को पार करने में सक्षम होने के लिए बहुत ही मौलिक है।

मैं मोनो टच के आखिरी संस्करण के साथ ओपनटीके शिपिंग के संस्करण का उपयोग कर रहा हूं।

उत्तर

4

यह सहायक कार्य काम करता है, लेकिन एक हैक जैसा लगता है।

असल में यह केवल Row0, Col0 का पता गुजर रहा है। चूंकि सी # संरचना में खेतों के आदेश के बारे में कोई गारंटी नहीं देता है, सैद्धांतिक रूप से यह किसी भी चीज़ से अधिक भाग्य से काम कर रहा है।

public static void UniformMatrix4(int location, Matrix4 value) 
{ 
    GL.UniformMatrix4(location, 1, false, ref value.Row0.X); 
} 

निश्चित रूप से ओपनटीके को सीधे मैट्रिक्स 4 को पारित करने की अनुमति देने के लिए बाइंडिंग होनी चाहिए।

+0

मुझे इस इंटरऑप सामग्री के बारे में बहुत कुछ पता नहीं है, लेकिन संभवतः यह विशेषता '[स्ट्रक्चरलाइट (लेआउटकिंड .equential)] 'मैट्रिक्स 4 के शीर्ष पर वास्तव में यह सुनिश्चित करता है कि यह स्मृति में इस तरह से निर्धारित किया गया है। * संपादित करें: * ओह ... रॉबर्ट ने वही बात कहा। – mpen

+0

रेफ वैल्यू। Row0.X काम किया। मुझे आश्चर्य है कि क्यों ref value.M11 नहीं करता है। वैसे भी, यह भाग्य या इसकी गारंटी से काम करता है? –

3

iphone टैग के आधार पर, मैं तुम्हें OpenTK.Graphics.ES20.GL उपयोग कर रहे हैं और नहीं नियमित डेस्कटॉप OpenTK.Graphics.OpenGL.GL संभालने हूँ। ओपनजीएल ईएस बाइंडिंग मानक डेस्कटॉप बाइंडिंग के रूप में पूरी तरह से नहीं हैं, जिनमें वेक्टर और मैट्रिस के लिए अधिभार शामिल हैं।

आपके द्वारा लिखी गई विधि लगभग वास्तविक ओपनजीएल बाइंडिंग की विधि के समान ही है, केवल एक ही मैट्रिक्स 4 को रेफरी के रूप में पास करता है, क्योंकि मान द्वारा मैट्रिक्स 4 पास करना धीमा है।

और बस FYI करें, यह Sequential के LayoutKind साथ StructLayoutAttribute का उपयोग कर सी # में एक struct में खेतों के आदेश की गारंटी करने के लिए संभव है, और OpenTK गणित structs तो बस यही काम।

+0

दूसरे शब्दों में, आपकी सहायक विधि ठीक है कि यह ओपनटीके उपयोगों के अधिभार के समान ही है। –

संबंधित मुद्दे