2009-02-27 21 views
5

Tôi đang tìm một kỹ thuật thay thế để hiển thị phản chiếu trong OpenGL ES trên iPhone. Thông thường tôi sẽ làm điều này bằng cách sử dụng bộ đệm stencil để đánh dấu nơi phản chiếu có thể được nhìn thấy (bề mặt phản xạ) và sau đó chỉ hiển thị hình ảnh đảo ngược trong các pixel đó. Do đó khi đối tượng phản xạ di chuyển ra khỏi bề mặt, phản xạ của nó không còn nhìn thấy nữa. Tuy nhiên, kể từ khi thực hiện của iPhone không hỗ trợ bộ đệm stencil tôi không thể xác định làm thế nào để ẩn các phần của sự phản chiếu rơi bên ngoài bề mặt.Làm cách nào để hiển thị phản hồi trong OpenGL ES trên iPhone mà không có bộ đệm stencil?

Để làm rõ, sự cố không tự hiển thị phản ánh nhưng ẩn chúng khi chúng không hiển thị.

Bất kỳ ý tưởng nào?

Trả lời

9

Hiển thị cảnh được phản ánh trước; sao chép ra một kết cấu bằng cách sử dụng glCopyTexImage2D; xóa bộ đệm khung; vẽ cảnh phù hợp, áp dụng các kết cấu sao chép vào bề mặt phản xạ.

2

Tôi không có một câu trả lời cho sự phản xạ, nhưng đây là cách tôi đang làm bóng mà không cần bộ đệm stencil, có lẽ nó sẽ cung cấp cho bạn một ý tưởng:

tôi thực hiện trước mặt/back-mặt quyết tâm cơ bản của lưới từ quan điểm của nguồn sáng. Sau đó tôi nhận được một danh sách tất cả các cạnh nối một tam giác phía trước với một tam giác phía sau. Tôi đối xử với danh sách cạnh này như là một dòng "vòng lặp". Tôi chiếu các đỉnh của vòng lặp này dọc theo tia sáng đối tượng cho đến khi nó cắt ngang mặt đất. Các điểm giao nhau này sau đó được sử dụng để tính một đa giác 2D trên cùng mặt phẳng với mặt đất. Sau đó tôi sử dụng thuật toán tesselation để biến poly đó thành tam giác. (Điều này hoạt động tốt miễn là nguồn sáng hoặc vật thể của bạn không di chuyển quá thường xuyên.)

Khi tôi có hình tam giác, tôi vẽ chúng với độ lệch nhỏ sao cho bộ đệm sâu sẽ cho phép bóng đi qua. Hoặc bạn có thể sử dụng decaling algorithm such as the one in the Red Book.

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