2009-10-24 40 views
9

Tôi dự định viết một trò chơi Java 3D sẽ hoạt động trên cả PC và Android. Rất tiếc, có vẻ như không có API OpenGL chung cho cả hai nền tảng.Viết một ứng dụng Java di động bằng cách sử dụng JOGL và Android OpenGL

API có khác biệt đáng kể không? Có cách nào tôi có thể sử dụng cùng một mã 3D trong cả hai phiên bản? Nó là một ý tưởng tốt?

+0

Câu hỏi hay - tính di động trên nền tảng di động vẫn không thực tế. – whatnick

+0

Thử sử dụng Qt. Đó là nền tảng và hoạt động trong Windows, Mac OSX, Linux, iOS, Android, BlackBerry, Windows RT và (ngay) Windows Phone.Nó cung cấp các chức năng OpenGL tối thiểu tương thích trên tất cả các nền tảng, nhưng bạn cũng có thể sử dụng các chức năng OpenGL cụ thể cho từng nền tảng (ví dụ: OpenGL đầy đủ trên máy tính để bàn). – trusktr

Trả lời

10

Android hỗ trợ OpenGL ES 1.0 chồng chéo với OpenGL 1.3 nên điều này có thể thực hiện được, nhưng không đơn giản chỉ thay thế tệp jar khi chạy.

Bạn nên cố gắng sử dụng lại càng nhiều càng tốt ứng dụng của bạn trên cả hai nền tảng. Dù sao, thực tế là tốt để tách biệt phần còn lại của bạn khỏi các phần phụ thuộc bên ngoài như OpenGL ngay cả khi bạn không cần hỗ trợ OpenGL ES cụ thể. Bạn không bao giờ biết API/nền tảng nào bạn có thể muốn chuyển ứng dụng của mình sang tương lai.

Có 2 tùy chọn khả dụng.

Đầu tiên là ẩn triển khai OpenGL phía sau giao diện mà phần còn lại của ứng dụng của bạn sử dụng và sau đó cung cấp các triển khai Jogl và Androide riêng biệt. Tùy thuộc vào nền tảng nào bạn đang chạy trên, bạn có thể chọn để instanciate thực hiện đúng lúc chạy bằng cách sử dụng mẫu nhà máy.

Vì OpenGL ES và OpenGL rất giống với nỗ lực cần thiết để duy trì điều này không nên quá cao, cho phép bạn tuân theo các chức năng chung.

Tùy chọn khác là thử và sử dụng Jogl2 có hỗ trợ cho cấu hình. Chúng xuất hiện để cung cấp chính xác những gì bạn cần nhưng Jogl2 vẫn đang trong giai đoạn thử nghiệm.

Đáy trang này nói một chút về hồ sơ: http://kenai.com/projects/jogl/pages/FAQ

Cấu hình cho phép các ứng dụng Java được viết theo một cách mà cho phép khả năng tương thích với nhiều phiên bản OpenGL cùng một lúc. Vì OpenGL ES (GL cho các hệ thống nhúng) có chức năng chồng chéo với OpenGL, nó đã mở ra cơ hội để thêm ngay cả Tiểu sử mà cầu nối máy tính để bàn và triển khai nhúng.

Bạn có thể muốn đọc số này http://michael-bien.com/mbien/entry/jogl_2_opengl_profiles_explained để biết thêm thông tin về tiểu sử.

+0

Câu trả lời được nghiên cứu rất độc đáo. Có một ứng dụng OS JOGL tốt đẹp được gọi là worldwind, mà tôi làm việc và tôi sẽ trả tiền để xem nó chạy trên Android. – whatnick

1

Thực sự có khá nhiều khác biệt giữa java3d và apengl android opengl. Java3d đầu tiên là một trừu tượng mức cao hơn trên 3d. Và ngay cả khi bạn sử dụng thứ gì đó giống như JOGL, sẽ có một số khác biệt trong api. Đặt cược tốt nhất của bạn sẽ trừu tượng hóa việc thực hiện bản vẽ 3D thực sự trong cơ sở mã, bạn có thể chia sẻ phần còn lại của logic, nhưng sau đó có mã nền tảng cụ thể để xử lý bản vẽ opengl/3d.

4

Dự án đã hoàn thành. Nó bật ra các API khác nhau một chút, nhưng chức năng có một phần được chia sẻ. Chúng tôi đã kết thúc bằng cách viết một bộ tiền xử lý đơn giản đã chuyển đổi mã JOGL thành phiên bản ES và tự động chuyển đổi với Eclipse.

+2

bạn có chia sẻ bộ tiền xử lý không? – Rom1

+0

Vui lòng chia sẻ bộ tiền xử lý. Tôi đang đối mặt với cùng một vấn đề – jmishra

+2

Không chắc chắn nếu nó giúp, bạn có thể có thể nhận được bằng cách sử dụng cpp của GCC. Dù sao, đây là dự án của chúng tôi (Netacka 3D): http://students.mimuw.edu.pl/~pm262952/netacka/ Đây là bộ tiền xử lý (bằng Python): http://pastebin.com/iPjDHiTR Và một tệp nguồn ví dụ: http://pastebin.com/vwHGcyC0 – hmp

1

Vì JOGL-ES đã được hợp nhất vào JOGL 2.x vài năm trước, giờ đây bạn có thể sử dụng JOGL cả trong môi trường máy tính để bàn và di động (Android).

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