2012-01-18 38 views
9

Tôi hoàn toàn mới đối với OpenGL vì vậy xin lỗi nếu đó là một câu hỏi ngớ ngẩn. Ngoài ra không có ý tưởng nếu nó làm cho một sự khác biệt, chỉ trong trường hợp, tôi đang sử dụng OpenGL ES 1.1.OpenGL ES 2D - z-đặt hàng, chiều sâu đệm vs bản vẽ theo thứ tự

Hiện tại tôi đang vẽ họa tiết theo thứ tự kết cấu, vì tôi đã đọc nó tốt hơn cho hiệu suất (có ý nghĩa). Nhưng bây giờ tôi tự hỏi liệu đó có phải là cách tiếp cận đúng hay không bởi vì tôi cần một số sprites nhất định trước mặt những người khác bất kể kết cấu. Theo như tôi biết, các tùy chọn của tôi cho z-order sẽ là kích hoạt bộ đệm độ sâu và sử dụng nó, hoặc để chuyển đổi thứ tự vẽ sao cho các sprites được vẽ theo thứ tự giá trị z.

Tôi đã đọc rằng bộ đệm độ sâu có thể là lần truy cập hiệu suất, nhưng do đó sẽ thay đổi thứ tự. Tôi nên làm gì?

+1

Vì mọi ứng dụng OpenGL hợp lý đều sử dụng bộ đệm độ sâu (ngoại trừ có thể đơn giản "vẽ một kết cấu 2D"), tôi đoán bạn nên thực sự tương tác lại tuyên bố "hiệu suất" này xuống một chút (nếu đúng) . –

+0

Một tùy chọn là thực hiện theo từng bước toàn bộ vấn đề và sử dụng một khung như Cocos2D. Nó sẽ mang gánh nặng OpenGL ra khỏi bạn. Nó hỗ trợ z-đặt hàng của sprites, và có thể tái sử dụng kết cấu với sprites bằng cách sử dụng CCSpriteBatchNode. (Không có cách nào để xen kẽ các kết cấu bó và thay đổi thứ tự z.) –

+0

Tôi đang làm trò chơi nhiều hơn cho việc học hơn bất cứ thứ gì khác, vì vậy tôi quyết định bắt đầu từ đầu – Dan2552

Trả lời

9

Câu trả lời ngắn gọn là sắp xếp các sprites. Có vẻ như bạn đang tạo thứ gì đó thực sự dựa trên 2d và trong khi bộ đệm z có thể là một công cụ rất hữu ích, nó có thể là hiệu suất ấn tượng nếu phần cứng không hỗ trợ và nếu bạn ' không thực sự sử dụng các vật thể 3D có thể giao nhau, nó không có ý nghĩa gì đối với tôi. Ngoài ra, nếu bạn có bất kỳ sprites nào là một phần trong suốt, tức là có pixel với giá trị alpha không phải là 0 hoặc 255 (hoặc 0.0 hoặc 1.0 nếu sử dụng dấu phẩy động) thì bạn phải sắp xếp.

Như một lưu ý phụ, tôi tin rằng hiệu suất bị mất khi thay đổi "sprites" chỉ xảy ra khi chuyển đổi bề mặt, và hiếm khi. Một cách để giúp giảm thiểu vấn đề này là đặt nhiều sprites khác nhau vào một hình ảnh như bạn có thể, trên một mạng lưới và sử dụng các mảnh nhỏ của bề mặt của bạn làm hình khối.

+0

Vì OpenGL chủ yếu dành cho 3D (thậm chí ES), Tôi đoán một phần cứng không hỗ trợ bộ đệm sâu phần cứng, tốt, không hỗ trợ phần cứng tăng tốc OpenGL ES, phải không? –

+0

Tôi không nghĩ rằng bất kỳ thiết bị iOS nào không hỗ trợ nó (tôi có thể không đúng). Bạn đã đưa ra một điểm tốt mặc dù, bởi vì nó là một trò chơi dựa trên gạch, tất cả các gạch sẽ được trong một sơ đồ hình ảnh duy nhất - bởi vì điều này, dựng hình trong vấn đề trật tự không nên ảnh hưởng đến nó? – Dan2552

+0

Chính xác, vấn đề tốc độ được đề cập khi chuyển đổi bề mặt chỉ áp dụng khi bạn thay đổi hình ảnh bạn đang làm việc trong bộ nhớ. Nó thực sự chỉ là một vấn đề khi bạn xả bộ nhớ video là tốt. Vấn đề thực sự là khi opengl hết dung lượng và phải tải hình ảnh từ bộ nhớ video, sau đó tải hình ảnh mới. –

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