2012-08-12 18 views
10

मैं हैकेल में कुछ ओपनजीएल प्रोग्रामिंग करने की कोशिश कर रहा हूं। लेकिन मैं पुस्तकालयों की वर्तमान स्थिति से उलझन में हूं। OpenGLTensor पैकेज का उपयोग करता है जो केवल कई वेक्टर प्रकारों को परिभाषित करता है (लेकिन सामान्य तरीके से ऐसा नहीं करता है)। ऐसा लगता है कि कोई मैट्रिक्स कार्यान्वयन नहीं है।हास्केल में ओपनजीएल के लिए किस रैखिक बीजगणित का उपयोग करना है?

रेखीय बीजगणित के लिए कई अन्य संकुल रहे हैं: tensor (ध्यान दें लोअरकेस टी), Vec, hmatrix जो Tensor की तुलना में अधिक पूरा होने लगते हैं।

जो मैं खोज रहा हूं उसे कम से कम 3 डी और 2 डी ग्राफिक्स में उपयोग किए जाने वाले सामान्य कार्यों में होना चाहिए, उचित प्रदर्शन करें और OpenGL के साथ संगत होना चाहिए, लेकिन मुझे लगता है कि मुझे इसके लिए लाइब्रेरी बदलनी होगी।

+1

भी [vect] (http://hackage.haskell.org/package/vect) है, जिसमें [ओपनजीएल एकीकरण] है (http://hackage.haskell.org/package/vect-opengl) अंतर्निहित । –

+1

** vect ** उपयोग करने योग्य दिखता है। लेकिन मुझे लगता है कि यह एक अच्छा (जेनेरिक) हैकेल लाइब्रेरी होने से बहुत दूर है। असल में यह बहुत कुछ दिखता है [जावा वेकमाथ] (http://java.net/projects/vecmath/) जहां प्रत्येक एल्गोरिदम प्रत्येक वेक्टर प्रकार के लिए घोषित किया जाता है। – fho

+0

मुझे लगता है कि आपको अपना खुद का लिखना चाहिए। अन्य कार्यान्वयन की आलोचना करने में सक्षम होने का मतलब है कि आप इसके लिए तैयार हैं। मैं एक बार इसी तरह की स्थिति में था और थोड़ी देर के लिए रुक गया, लेकिन अंत में यह समय था कि खर्च करने लायक था। – user1095108

उत्तर

2

देर उत्तर, क्षमा करें। एचएमट्रिक्स इस तरह की चीजों के लिए मानक पसंद है। यह बहुत संगत है, इसमें एक अच्छा एपीआई है, और वास्तव में अन्य अनुप्रयोगों के बीच कंप्यूटर दृष्टि के लिए उपयोग किया जाता है: http://dis.um.es/profesores/alberto/research.html

+1

दुर्भाग्यवश, हैमट्रिक्स केवल उन चीज़ों के वैक्टर/मैट्रिस पर काम करता है जो 'स्टेरियल' हैं, उपनाम "सी प्रतिनिधित्व है"। यदि आप वहां अन्य या अपने डेटा प्रकारों का उपयोग करना चाहते हैं, तो आपको खुद को 'स्टेरियल' उदाहरण लिखना होगा, जिसमें निम्न-स्तरीय सूचक प्रोग्रामिंग (या [जेनेरिक-स्टेबल] का उपयोग करना शामिल है (http://hackage.haskell.org/पैकेज/सामान्य-संग्रहणीय))। अन्य पैकेज में यह प्रतिबंध नहीं है, और उदाहरण पर काम कर सकता है 'Num' उदाहरण के साथ सबकुछ। यदि आपको केवल मानक संख्याओं की आवश्यकता है, तो हैमट्रिक्स बेहतर हो सकता है (और शायद सी में लागू संचालन के साथ तेजी से रास्ता) वैकल्पिक हो सकता है। – nh2

+1

हैमट्रिक्स भी जीपीएल लाइसेंस द्वारा बाध्य लगता है - जो एक समस्या पैदा कर सकता है। – sdasdadas

1

मैं हाल ही में सोच रहा था, और विशेष रूप से नाराज था कि टेंसर आपको डॉट उत्पाद के लिए सुविधाजनक कार्यों प्रदान नहीं करता है, उत्पाद पार, सामान्य आदि

आपके कहे अनुसार, vectFloat और Double के लिए "हार्डकोडेड" है, और therfore Functor, Monoid या Applicative की तरह उपयोगी typeclass उदाहरणों नहीं हो सकता है - उन के साथ हम "के लिए संचालन का एक बहुत मिलेगा मुफ्त ", उदाहरण के लिए अतिरिक्त: (+) <$> v1 <*> v2

#haskell पर, मुझे linear पैकेज पर इंगित किया गया था। यह अच्छी तरह से बनाए रखा है और उपयोगी उदाहरणों और कार्यों के समूह के साथ आता है।