2009-03-31 24 views
13

Tôi muốn xác định tọa độ màn hình 2D (x, y) của các điểm trong không gian 3D (x, y, z).Chiếu phối cảnh - Trợ giúp Noob

Các điểm tôi muốn chiếu là các điểm trong thế giới thực được biểu thị bằng tọa độ GPS và độ cao trên mực nước biển.

Ví dụ: Point (Lạt: 49,291882, Long: -123,131676, Chiều cao: 14m)

Vị trí camera và chiều cao cũng có thể được xác định như một x, y, z điểm. Tôi cũng có tiêu đề của máy ảnh (độ la bàn), độ nghiêng của nó (trên/dưới chân trời) và cuộn (quanh trục z).

Tôi không có kinh nghiệm lập trình 3D, do đó, tôi đã đọc xung quanh chủ đề chiếu phối cảnh và biết rằng nó đòi hỏi kiến ​​thức về ma trận, chuyển đổi, v.v. - tất cả điều này hoàn toàn gây nhầm lẫn cho tôi.

Tôi được thông báo rằng OpenGL có thể được sử dụng để xây dựng mô hình 3D của các điểm thực trong thế giới thực, thiết lập hướng máy ảnh và truy xuất tọa độ 2D của các điểm 3D.

Tuy nhiên, tôi không chắc chắn nếu sử dụng OpenGL là giải pháp tốt nhất cho vấn đề này và thậm chí nếu nó là tôi không có ý tưởng làm thế nào để tạo ra các mô hình, thiết lập máy ảnh vv

một người nào đó có thể đề nghị phương pháp tốt nhất để giải quyết vấn đề của tôi? Nếu OpenGL là một giải pháp khả thi tôi sẽ phải sử dụng OpenGL ES nếu điều đó tạo ra bất kỳ sự khác biệt nào. Oh và bất kỳ giải pháp nào tôi chọn nó phải thực thi nhanh chóng.

Nhờ sự giúp đỡ của bạn

+0

Bạn có kiến để vẽ các công cụ hoặc bạn muốn chỉ tính toán một số điểm? –

Trả lời

4

Bạn thực sự cần một perspective projectionmatrix operations đơn giản hóa việc làm như vậy. Tôi cho rằng bạn đã biết rằng spherical coordinates của bạn phải được chuyển thành Cartesian coordinates cho các tính toán này.

Sử dụng OpenGL có thể giúp bạn tiết kiệm rất nhiều công sức khi tự mình lăn software rasterizer. Vì vậy, tôi sẽ tư vấn cho trying it trước tiên. Bạn có thể thử nghiệm hệ thống của mình trên PC vì OpenGL ES không quá khác biệt miễn là bạn giữ nó đơn giản.

+0

Tôi đã không nhận thức được tôi đã phải chuyển đổi sang tọa độ Descartes, vì vậy cảm ơn cho điều đó. Về OpenGL, tôi nghĩ rằng tôi sẽ thử và thực hiện một giải pháp sử dụng nó vì nó có phương pháp để thiết lập vị trí máy ảnh và tôi tin rằng cơ chế để có được phép chiếu 2D từ mô hình 3D. Bạn có biết bất kỳ hướng dẫn hay nào không? –

+0

Đây là những hướng dẫn cổ điển được chuyển đến một số ngôn ngữ: http://nehe.gamedev.net/ –

2

Nếu chỉ cần tính tọa độ của một số điểm, bạn chỉ cần có một số kỹ năng đại số, chứ không phải lập trình 3D với openGL.

Hơn nữa OpenGL không đối phó với Geographic phối

đầu tiên nhận được một số doc về WGS84 và đo đạc tọa độ, bạn phải đầu tiên để chuyển đổi dữ liệu GPS của bạn thành một khung Descartes (ví dụ trái đất là trung tâm khung Descartes trong đó được định nghĩa là WGS84 ellipsoid).

Sau đó, tính toán với ma trận có thể diễn ra. Chuỗi của biến đổi là khoảng:

  • WGS84
  • trái đất là trung tâm phối
  • một số khung địa phương
  • khung camera
  • chiếu 2D

Đối với chuyển đổi đầu tiên nhìn thấy this Cuối cùng liên quan đến ma trận chiếu Những người khác chỉ là tọa độ xoay và dịch. "một số khung cục bộ" là khung địa phương có nguồn gốc với vị trí máy ảnh của bạn ốp với ellipsoid.

2

Tôi muốn giới thiệu "Toán học lập trình trò chơi 3D và đồ họa máy tính" của Eric Lengyel. Nó bao gồm các ma trận, các phép biến đổi, khung nhìn thất vọng, chiếu phối cảnh và hơn thế nữa.

Ngoài ra còn có một chương hay trong Hướng dẫn lập trình OpenGL (sổ đỏ) để xem các phép biến đổi và thiết lập máy ảnh (bao gồm cách sử dụng gluLookAt).

Nếu bạn không quan tâm đến việc hiển thị cảnh 3D và bị giới hạn sử dụng OpenGL ES thì có thể tốt hơn là chỉ viết mã của riêng bạn để thực hiện ánh xạ từ hợp đồng cửa sổ 3D sang 2D. Là điểm khởi đầu bạn có thể tải xuống Mesa 3D, triển khai mã nguồn mở OpenGL, để xem cách chúng triển khai gluPerspective (để đặt ma trận chiếu), gluLookAt (để đặt chuyển đổi máy ảnh) và gluProject (để chiếu điểm 3D vào thanh kéo cửa sổ 2D).

12

Đây là câu trả lời rất chung chung. Nói máy ảnh tại (Xc, Yc, Zc) và điểm bạn muốn chiếu là P = (X, Y, Z). Khoảng cách từ máy ảnh đến mặt phẳng 2D mà bạn đang chiếu là F (do đó phương trình của mặt phẳng là Z-Zc = F). Các tọa độ 2D của P chiếu lên mặt phẳng là (X ', Y').

Sau đó, rất đơn giản:

X '= ((X - Xc) * (F/Z)) + Xc

Y' = ((Y - Yc) * (F/Z)) + Yc

Nếu máy ảnh của bạn là nguồn gốc, thì đây đơn giản để:

X '= X * (F/Z)

Y' = Y * (F/Z)

+0

Không phải hai phương trình đầu tiên đọc 'X '= ((X - Xc) * (F/(Z-Zc))) + Xc' và 'Y '= ((Y - Yc) * (F/(Z-Zc))) + Yc'? –

+1

@rofrankel Điều gì xảy ra nếu tôi muốn trỏ điểm với Z = 0? – 0x6B6F77616C74

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