2010-06-08 13 views
5

के भीतर एक मनमानी रेक्ट पर ज़ूम इन करने का प्रयास कर रहा है मुझे एक स्क्रीन-गठबंधन ट्रैक्टर मिला है, और मैं उस ट्रैक्टर के भीतर एक मनमाना आयत में ज़ूम करना चाहता हूं, लेकिन मुझे अपना गणित नहीं मिल रहा है सही।स्क्रीन-गठबंधन क्वाड

मुझे लगता है कि मुझे अनुवाद का काम मिला है, सिर्फ स्केलिंग नहीं। असल में, मेरा कोड निम्न है:

// 
// render once zoomed in 
glPushMatrix(); 
glTranslatef(offX, offY, 0); 
glScalef(?wtf?, ?wtf?, 1.0f); 

RenderQuad(); 

glPopMatrix(); 

// 
// render PIP display 
glPushMatrix(); 
glTranslatef(0.7f, 0.7f, 0); 
glScalef(0.175f, 0.175f, 1.0f); 

RenderQuad(); 

glPopMatrix(); 

किसी के पास कोई सुझाव है? उपयोगकर्ता एक रेक्ट क्षेत्र का चयन करता है, और उसके बाद वे मान मेरे प्रतिपादन ऑब्जेक्ट को [x, y, w, h] के रूप में पास किए जाते हैं, जहां वे मान व्यूपोर्ट की चौड़ाई और ऊंचाई के प्रतिशत होते हैं।

उत्तर

0

जब मुझे ऐसा करने की आवश्यकता होती है, तो मैंने हमेशा पैरामीटर को glOrtho, glFrustrum, gluPerspective, या जो कुछ भी (मैं जो भी उपयोग कर रहा था) में बदल दिया है।

+0

मैं ग्लोथो (0, 1, 0, 1, 0, 1) का उपयोग कर रहा हूं। मैंने इसे नीचे-बाएं रेक्ट पर ज़ूम करने के अनुकरण के लिए ग्लोथो (0, 0.5, 0, 0.5, 0, 1) में बदलने की कोशिश की, लेकिन मुझे अभी मौत की एक ब्लैक स्क्रीन मिली। – moswald

+0

@mos: मैं थोड़ा सा खो गया हूं कि यह कैसे हो सकता है, जब तक कि आप कुछ और भी नहीं बदलते (या, ज़ाहिर है, उस चतुर्भुज में कुछ भी नहीं खींचा था)। संभवतः आप इसे 'glMatrixMode (GL_Projection) के बाद बुला रहे हैं; glLoadIdentity(); '? –

+0

एएके! क्षमा करें, जब मैंने अपना परीक्षण किया, तो मैंने अपने वर्तमान कोड पर टिप्पणी की। ... RenderQuad को कॉल सहित। उस भाग को वापस रखकर इसे काम करना पड़ा। – moswald

0

आपकी टिप्पणी से ऐसा लगता है कि आप एक ही क्वाड (RenderQuad()) को पूर्ण छवि और पीआईपी मोड में आकर्षित करना चाहते हैं।

मान लें कि आपके पास चौड़ाई पीआईपी और ऊंचाई पीआईपी और पीआईपी विंडो की स्टार्टएक्सवाई स्थिति है, तो चौड़ाई पीआईपी/कुल चौड़ाई, ऊंचाई पीआईपी/कुल हाइट का उपयोग मूल क्वाड स्केल करने और दिए गए स्टार्टएक्स पर फिर से प्रस्तुत करने के लिए करें।

क्या आप यह देख रहे हैं?

1

यह देखते हुए कि आपके मान [x, y, w, h] के रूप में पारित किए गए हैं, मुझे लगता है कि आप पहले नकारात्मक दिशा में अनुवाद करना चाहते हैं ताकि ऊपरी बाएं कोने को 0,0 पर प्राप्त किया जा सके, फिर 1/डब्ल्यू तक स्केल करें और इसे स्क्रीन पर भरने के लिए 1/एच। इस तरह:

// 
// render once zoomed in 
glPushMatrix(); 
glTranslatef(-x, -y, 0); 
glScalef(1.0/w, 1.0/h, 1.0f); 

RenderQuad(); 

glPopMatrix(); 

इस काम करता है?

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