2012-09-01 12 views
14

मैंने हाल ही में सोचा था कि ओपनजीएल पुरानी (बहिष्कृत) कार्यक्षमता से स्विच करना एक अच्छा विचार होगा, जैसे मैट्रिक्स ऑपरेशंस और फिक्स्ड फ़ंक्शन पाइपलाइन।क्या glm :: ortho() वास्तव में गलत है?

मैं जीएलएम का उपयोग अपनी मैट्रिक्स लाइब्रेरी के रूप में चीजों को सरल बनाने के लिए कर रहा हूं। समस्या यह है कि इससे सरलीकृत होने की तुलना में अधिक समस्याएं हो सकती हैं ...

परिप्रेक्ष्य अनुमान मेरे शेडर्स और सेटअप के साथ ठीक काम करते थे, लेकिन जब मैंने ऑर्थोगोनल पर स्विच करने की कोशिश की, तो सबकुछ टूट गया। मेरे अंक और सरल quads प्रदर्शित नहीं होगा। जब मैंने पुराने ओपनजीएल मैट्रिस का इस्तेमाल किया, तो चीजें फिर से काम करना शुरू कर दीं।

मैंने इसे सब प्रक्षेपण मैट्रिक्स में संकुचित कर दिया। यहाँ कैसे मैं इसे कहा जाता है:

glm::mat4 projMat = glm::ortho(0, 400, 0, 400, -1, 1); 

मुझे लगता है कि ओपन के द्वारा आपूर्ति की तुलना में एक बार इस "कहा जाता है

glOrtho(0, 400, 0, 400, -1, 1); 

केवल मतभेद [0] [0] तत्व और [1 हैं ] [1] तत्व (जो, जहां तक ​​मुझे पता है, क्रमशः "2/चौड़ाई" और "2/ऊंचाई" के बराबर हो)। ओपनजीएल मैट्रिक्स से, मान बिल्कुल ठीक थे! ग्लम मैट्रिक्स पर, हालांकि, मान 0

एक बार जब मैंने glm :: ortho कहा, तो मैन्युअल रूप से ग्लम मैट्रिक्स से मानों को मैन्युअल रूप से स्विच कर दिया, सब कुछ फिर से काम कर रहा था!

तो मेरा सवाल है: glm :: ortho() फ़ंक्शन वास्तव में टूटा हुआ है, या क्या मैं इसे गलत उपयोग कर रहा हूं?

उत्तर

39

ऐसा लगता नहीं है कि यह स्रोत कोड से टूट जाना चाहिए (V 0.9.3.4)

template <typename valType> 
GLM_FUNC_QUALIFIER detail::tmat4x4<valType> ortho 
(
    valType const & left, 
    valType const & right, 
    valType const & bottom, 
    valType const & top, 
    valType const & zNear, 
    valType const & zFar 
) 
{ 
    detail::tmat4x4<valType> Result(1); 
    Result[0][0] = valType(2)/(right - left); 
    Result[1][1] = valType(2)/(top - bottom); 
    Result[2][2] = - valType(2)/(zFar - zNear); 
    Result[3][0] = - (right + left)/(right - left); 
    Result[3][1] = - (top + bottom)/(top - bottom); 
    Result[3][2] = - (zFar + zNear)/(zFar - zNear); 
    return Result; 
} 

मेरी केवल सोचा कि इस टेम्पलेट पूर्णांकों का एक मैट्रिक्स बनाने जा सकता है (जैसा कि आपने फंक्शन में सभी स्याही पारित), और इस प्रकार फ्लोटिंग बिंदु के बजाय पूर्णांक विभाजन कर रहे हैं। क्या आप अपने सभी पैरामीटर में .f जोड़ना चाहते हैं?

glm::mat4 projMat = glm::ortho(0.f, 400.f, 0.f, 400.f, -1.f, 1.f);

+7

वाह, आप जगह पर थे! मेरे पैरामीटर को तैरने के बाद बदलने के बाद, सबकुछ बाहर निकला। इसे साफ़ करने के लिए धन्यवाद :) –

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