2010-03-29 44 views
6

Tôi đang làm việc trên ứng dụng OpenGL ES1 hiển thị lưới 2D và cho phép người dùng điều hướng và chia tỷ lệ/xoay vòng. Tôi cần phải biết chính xác bản dịch của View Touch tọa độ vào thế giới opengl của tôi và ô lưới. Có người giúp đỡ nào để làm ngược lại vài biến đổi cuối cùng mà tôi làm để điều hướng không? hoặc tôi nên tính toán và làm những thứ ma trận bằng tay?iPhone OpenGL ES - Cách chọn

Trả lời

4

Chế độ chọn không khả dụng trong ES OpenGL. Nhưng thật dễ dàng để tính tọa độ màn hình của bất kỳ điểm 3d nào bằng ma trận chiếu được lấy từ trạng thái OpenGL hiện tại. Sau đây là cách tôi làm điều đó (IMPoint2D và IMPoint3D là cơ bản (x, y) và (x, y, z) cấu trúc)

+ (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

tôi đã thêm chức năng - (CGPoint) getScreenCoorOfPoint: (IMPoint3D) _point3D mà dường như để cho tôi vị trí mục của tôi trên thế giới nhưng các bit bây giờ tôi bị mắc kẹt trên là: * tôi có các đối tượng có một vị trí * tôi có vị trí của tôi trên thế giới (gluLookAt mắt [0], mắt [1], mắt [2]) * và sau đó tôi có nơi tôi khai thác trên s creen Làm cách nào để tham gia tất cả điều này, đó là điều cuối cùng trong cách tôi lưu trữ sự vĩ đại !!!! – Burf2000

6

Âm thanh như những gì bạn đang tìm kiếm là một phương pháp unproject. Các thư viện glut đi kèm với một, nhưng nó không có sẵn trên OpenGL ES. Có thể rewrite the glut code yourself to be iphone compatible Bạn cũng có thể viết mã của riêng mình để không dự án, có liên quan đến việc cần phải mở rộng điểm tiếp xúc với chế độ xem của bạn, nhân nó với nghịch đảo của ma trận chiếu * modelview và chia cho w để lấy vector 3D.

0

Có thể thực hiện việc này với GL_MODELVIEW_MATRIX? hoặc GL_MODLVIEW, tôi không sửa đổi vị trí xem, chỉ del modelview. Tôi đang làm điều này:

  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); 

nhờ

Các vấn đề liên quan