2008-09-22 11 views
8

पर मैं इस दृश्य सेट है:ओपन: पेश माउस क्लिक ज्यामिति

glMatrixMode(GL_MODELVIEW); //Switch to the drawing perspective 
glLoadIdentity(); //Reset the drawing perspective 

और मैं एक माउस क्लिक से एक स्क्रीन स्थिति (sx, SY) मिलता है।

जेड के मान को देखते हुए, मैं एसएक्स और सी से 3 डी-स्पेस में एक्स और वाई की गणना कैसे कर सकता हूं? कि यदि आप

उत्तर

11

आप gluUnProject उपयोग करना चाहिए:

सबसे पहले, के पास विमान को गणना "unprojection": तो अब तक विमान को

GLdouble modelMatrix[16]; 
GLdouble projMatrix[16]; 
GLint viewport[4]; 

glGetIntegerv(GL_VIEWPORT, viewport); 
glGetDoublev(GL_MODELVIEW_MATRIX, modelMatrix); 
glGetDoublev(GL_PROJECTION_MATRIX, projMatrix); 

GLdouble x, y, z; 
gluUnProject(sx, viewport[1] + viewport[3] - sy, 0, modelMatrix, projMatrix, viewport, &x, &y, &z); 

और:

// replace the above gluUnProject call with 
gluUnProject(sx, viewport[1] + viewport[3] - sy, 1, modelMatrix, projMatrix, viewport, &x, &y, &z); 

अब आप है विश्व निर्देशांक में एक पंक्ति मिली है जो आपको पर क्लिक कर रहे सभी संभावित बिंदुओं का पता लगा रही है। तो अब आप सिर्फ अंतर्वेशन की जरूरत है: मान लीजिए आप z निर्देशांक दिया जाता है:

GLfloat nearv[3], farv[3]; // already computed as above 

if(nearv[2] == farv[2])  // this means we have no solutions 
    return; 

GLfloat t = (nearv[2] - z)/(nearv[2] - farv[2]); 

// so here are the desired (x, y) coordinates 
GLfloat x = nearv[0] + (farv[0] - nearv[0]) * t, 
     y = nearv[1] + (farv[1] - nearv[1]) * t; 
+0

नोब टिप्पणी के लिए खेद है। GluUnproject में तीसरा पैरामीटर हमेशा समान (0 और 1) कॉल करता है या यह zNear और zFar मानों पर निर्भर करता है जब हम gluPerspective के साथ प्रोजेक्शन मैट्रिक्स सेट कर रहे हैं? – rgngl

0

libqglviewer एक अच्छा चयन ढांचा है। http://www.toymaker.info/Games/html/picking.html आपकी मदद करनी चाहिए - यह डी 3 डी-केंद्रित है लेकिन सिद्धांत समान है।

यदि आप माउस-आधारित पिकिंग करना चाहते हैं, हालांकि, मैं चयन प्रतिपादन मोड का उपयोग करने का सुझाव देता हूं।

संपादित करें: आपको याद रखें, मॉडल-व्यू मैट्रिक्स खेल में आता है, लेकिन चूंकि आपकी पहचान पहचान है, यह एक अनिश्चित है।

2

देख रहे हैं यह वास्तव में प्रक्षेपण मैट्रिक्स, नहीं मॉडल-व्यू मैट्रिक्स पर निर्भर है है

3

यह सबसे अधिक आधिकारिक स्रोत, OpenGL's web site द्वारा सबसे अच्छा उत्तर दिया गया है।

+0

बल्कि लिंक पर क्लिक करने पता लगाने के लिए की तुलना में अपने जवाब में स्रोत का नाम लाना उपयोगी होगा। – danio

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