OpenGL ES 2.0: Trộn 2D với 3D


7

Có thể kết hợp đồ họa 2D và 3D trong một trò chơi OpenGL ES 2.0 không?

Tôi có rất nhiều đồ họa 2D trong trò chơi của mình. Đồ họa 2D được thể hiện bằng hai đa giác hình tam giác (tạo thành một hình chữ nhật) với kết cấu trên chúng. Tôi sử dụng ma trận chỉnh hình để hiển thị toàn bộ cảnh.

Tuy nhiên, tôi cần thêm một số hiệu ứng 3D vào trò chơi của mình. Vì vậy, tôi muốn sử dụng máy ảnh phối cảnh để kết xuất các mắt lưới.

Có thể kết hợp máy ảnh chính tả và phối cảnh trong một cảnh không? Nếu có, sẽ có một chi phí hiệu suất lớn cho việc này? Có bất kỳ phương pháp đề nghị để làm điều này có hiệu quả? Tôi sẽ có 90% đồ họa 2D và chỉ 10% 3D.

Nền tảng mục tiêu là OpenGL ES 2.0 (iOS, Android). Tôi sử dụng C ++ để phát triển.

Cảm ơn bạn.


Đã sửa thẻ openg giả cho bạn. :)
ChrisE

Câu trả lời:


10

Điều này được thực hiện dễ dàng.

Đặt chuyển đổi chế độ xem thành hình chính tả cho nội dung 2D và hiển thị nó. Sau đó, trước khi xóa bộ đệm khung, vẽ các hiệu ứng bằng hình chiếu phối cảnh. Phép chiếu sẽ chỉ ảnh hưởng đến hình học được vẽ sau nó, vì vậy chỉ cần đặt chế độ mong muốn trước khi vẽ.

Đây là cùng một cách chúng tôi xử lý HUD trong FPS của chúng tôi. :)

Tác động hiệu suất duy nhất là bạn đang thay đổi một biến thống nhất (ma trận dự án của bạn), phải không? Vì vậy, chỉ cần cố gắng hàng loạt thứ để giảm thiểu thay đổi trạng thái - cùng một thứ cũ.


1
+1 cho câu trả lời tốt. Tôi nghĩ rằng, câu hỏi đã được trả lời rõ ràng, cho tôi thông tin chắc chắn để bắt đầu tự mình thử nghiệm. Tôi đánh dấu đây là câu trả lời được chấp nhận .
Bunkai.Satori

1

Sẽ chỉ có một cú đánh hiệu suất nhẹ nếu bạn tính toán ma trận chiếu hình chính tả và phối cảnh mỗi lần bạn kết xuất vào bộ đệm khung. Tôi đề nghị lưu trữ chúng trong một biến, tính toán và lưu trữ chúng một lần trong mã khởi tạo, sau đó sử dụng glLoadMatrixđể tải ma trận. Phương thức kết xuất sẽ trông như thế này trong mã giả:

// Draw 3D things first
glMatrixMode(GL_PROJECTION);
glLoadMatrix(perspective_projection_matrix);
glMatrixMode(GL_MODELVIEW);
Draw3DObjects();
// Draw 2D things second
glMatrixMode(GL_PROJECTION);
glLoadMatrix(orthographics_projection_matrix);
glMatrixMode(GL_MODELVIEW);
Draw2DObjects();

Không có glMatrixMode hoặc glLoadMatrix trong OpenGL ES. Tất cả các thói quen ma trận dựa trên CPU đã được gỡ bỏ. Bạn có thể làm tương đương nhưng bạn sẽ phải tự cuộn nó.
John Meacham
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.