2010-03-29 17 views
6

कैसे चुनें I ओपनजीएल ईएस 1 ऐप पर काम कर रहा हूं जो 2 डी ग्रिड प्रदर्शित करता है और उपयोगकर्ता को नेविगेट करने और स्केल/घुमाने के लिए अनुमति देता है। मुझे अपनी ओपनगल दुनिया और ग्रिड सेल में व्यू टच निर्देशांक के सटीक अनुवाद को जानने की आवश्यकता है। क्या नेविगेशन के लिए पिछले कुछ परिवर्तनों के विपरीत करने के लिए कोई सहायक है? या मुझे हाथ से मैट्रिक्स सामान की गणना और करनी चाहिए?आईफोन ओपनजीएल ईएस -

उत्तर

4

पिकिंग मोड ओपनजीएल ईएस में उपलब्ध नहीं है। लेकिन वर्तमान ओपनजीएल राज्य से प्रक्षेपित मैट्रिक्स का उपयोग करके किसी भी 3 डी बिंदु के स्क्रीन समन्वय की गणना करना आसान है। यहाँ कैसे मैं इसे ((एक्स, वाई, जेड) संरचनाओं IMPoint2D और IMPoint3D बुनियादी (एक्स, वाई) और) कर

+ (IMPoint2D) getScreenCoorOfPoint:(IMPoint3D)_point3D 
{ 
    GLfloat  p[16];            // Where The 16 Doubles Of The Projection Matrix Are To Be Stored 
    glGetFloatv(GL_PROJECTION_MATRIX, p);       // Retrieve The Projection Matrix 
/* 
Multiply M * point 
*/ 
    GLfloat _p[] = {p[0]*_point3D.x +p[4]*_point3D.y +p[8]*_point3D.z + p[12], 
        p[1]*_point3D.x +p[5]*_point3D.y +p[9]*_point3D.z + p[13], 
        p[2]*_point3D.x +p[6]*_point3D.y +p[10]*_point3D.z+ p[14], 
        p[3]*_point3D.x +p[7]*_point3D.y +p[11]*_point3D.z+ p[15]}; 
/* 
divide by scale factor 
*/ 
    IMPoint2D _p2D = {_p[0]/_p[3], _p[1]/_p[3]}; 
/* 
get result in screen coordinates. In this case I'm in landscape mode 
*/ 
    return (IMPoint2D) {_p2D.x*240.0f + 240.0f, (1.0f - _p2D.y) *160.0f}; 
} 
+0

मैं समारोह जोड़ा - (CGPoint) getScreenCoorOfPoint: (IMPoint3D) _point3D जो मुझे दुनिया में अपने आइटम स्थिति देने के लिए लेकिन थोड़ा मैं अब अटक कर रहा हूँ लगता है पर है: * मैं वस्तुओं की स्थिति है कि है * मैं दुनिया में मेरी स्थिति है (gluLookAt आंख [0], आंख [1], आंख [2]) * और फिर मैं जहां मैंने एस पर टैप किया है क्रेन मैं इस सब में कैसे शामिल हो सकता हूं, यह महानता संग्रह करने के मेरे रास्ते में आखिरी बात है !!!! – Burf2000

6

ध्वनि क्या आप देख रहे हैं एक unproject तरीका है की तरह है। ग्लूट लाइब्रेरी एक के साथ आता है, लेकिन यह ओपनजीएल ईएस पर उपलब्ध नहीं है। rewrite the glut code yourself to be iphone compatible आप अपने स्वयं के कोड को अप्रचलित करने के लिए भी लिख सकते हैं, जिसमें आपके व्यूपोर्ट में टचपॉइंट को स्केल करने की आवश्यकता होगी, इसे अपने प्रक्षेपण * मॉडलव्यू मैट्रिस के विपरीत से गुणा करें, और 3 डी वेक्टर प्राप्त करने के लिए डब्ल्यू द्वारा विभाजित करें।

0

GL_MODELVIEW_MATRIX के साथ ऐसा करना संभव हो सकता है? या GL_MODLVIEW, मैं दृश्य स्थिति को संशोधित नहीं कर रहा हूं, केवल डेल मॉडलव्यू। मैं यह कर रहा:

  glMatrixMode(GL_MODELVIEW); 

// Setup model view matrix 
      glLoadIdentity(); 
      [gAccel GetAccelerometerMatrix:(GLfloat *) matrix headingX:headx headingY: heady headingZ:headz]; 

      // Finally load matrix 
      glLoadMatrixf((GLfloat*)matrix); 

      glPushMatrix(); 
      glRotatef(-90, 1, 0, 0); 
      glScalef(0.0005, 0.0005, 0.0005); 
      glTranslatef(x, 0.0, z); 

धन्यवाद

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