2012-12-20 18 views
7

Tôi cần gl_FragColor để "sơn" các giá trị dấu phẩy động, cũng có thể âm (x < 0) và> 1.0. Sau đó tôi muốn sử dụng màu gắn của FBO giá trị này, nơi kết xuất và sử dụng nó như là một kết cấu trong FBO khác. Bây giờ tôi đã đọc trên http://www.khronos.org/opengles/sdk/docs/man/ (dưới glTexImage2D) rằng tất cả các giá trị được kẹp vào một phạm vi [0, 1] và tôi cũng không tìm thấy một lệnh glClampColor. Có khả năng tìm một cách giải quyết ở đây hay không ai đó có ý tưởng có thể giúp tôi giải quyết vấn đề của tôi? :)Kết cấu dấu chấm động trong OpenGL ES 2.0 trên iOS mà không cần kẹp chúng vào [0, 1]

SOLVED

Có thể và các giá trị được không kẹp để [0, 1] ở tất cả, khi sử dụng kết cấu điểm nổi, nhưng nó chỉ hoạt động sử dụng GL_HALF_FLOAT_OES như là định dạng nội bộ của kết cấu. Sử dụng GL_FLOAT thay vì kết quả thành một đối tượng framebuffer không đầy đủ, điều này thực sự buồn, vì tôi đã xây dựng một bảng tổng hợp (SAT) và có một vấn đề chính xác lớn ở đây. Vì vậy, nói chung nó có vẻ như chỉ có một nửa độ chính xác (2 byte, 1 bit dấu + 5 số mũ bit + 10 phần) số điểm nổi được hỗ trợ trên iPad2.

tạo làm việc của kết cấu màu attachement của FBO

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, w, h, 0, GL_RGBA, GL_HALF_FLOAT_OES, NULL); 

Một điều nữa đề cập đến: Dụng cụ sẽ báo cáo một "enum không hợp lệ cho lập luận 'loại'" tin nhắn, nhưng nó không làm việc anyway. Ngoài ra, trình mô phỏng sẽ sử dụng các hoạ tiết chính xác đầy đủ thay vì độ chính xác một nửa được chỉ định (tôi nghĩ nguyên nhân không có loại dữ liệu nào trong C). Đây là lý do tại sao u propably sẽ nhận được vấn đề ít chính xác hơn trên giả lập.

Nhưng điều khó hiểu nhất là "GL_OES_texture_float" được hỗ trợ khi in glGetString (GL_EXTENSIONS). Tuy nhiên như đã đề cập trước đó nó không hoạt động.

+1

Loại nội dung kết cấu bạn đang sử dụng là gì? –

+0

Xin lỗi các bạn, hy vọng tất cả các bạn đều có một kỳ nghỉ tuyệt vời. Cảm ơn bạn rất nhiều cho đến nay. Tôi sẽ kiểm tra cuối tuần này. – RayDeeA

+0

Định dạng nội bộ là GL_RGB. Đó là lý do tại sao tôi lo lắng khiến tài liệu nói rằng chỉ GL_ALPHA, GL_LUMINANCE, GL_LUMINANCE_ALPHA, GL_RGB và GL_RGBA được phép và tất cả chúng được kẹp vào [0,1] Xem: http://www.khronos.org/opengles/sdk/docs/man/under glTexImage2D – RayDeeA

Trả lời

4

Tôi không tin điều này là đúng đối với kết cấu nổi. Kiểm tra các tài liệu mở rộng:

http://www.khronos.org/registry/gles/extensions/OES/OES_texture_float.txt

Nó đề cập đến:.

"Các nhóm đã chọn được xử lý như đã mô tả trong phần 3.6.2, dừng sau khi mở rộng cuối cùng để RGBA Nếu định dạng nội bộ của kết cấu là điểm cố định, các thành phần được kẹp thành [0,1]. Nếu không, giá trị không phải là được sửa đổi. "

+0

Tôi đã thử sử dụng GL_OES_texture_float làm loại kết cấu, nhưng kết quả duy nhất là nhật ký nói rằng nó không thể tạo ra một đối tượng framebuffer hoàn chỉnh hay còn gọi là 8cd6. :( – RayDeeA

+0

Chắc chắn là có thể sử dụng kết cấu nổi trên iOS, nhưng bạn sẽ phải hiển thị một số mã nếu bạn mong đợi bất kỳ ai cần trợ giúp. – Tark

+0

Bạn đã đúng.Có thể và các giá trị không được kẹp ở tất cả, nhưng nó chỉ hoạt động bằng cách sử dụng GL_HALF_FLOAT_OES làm định dạng nội bộ. Sử dụng GL_FLOAT thay vì kết quả thành một đối tượng framebuffer không đầy đủ. Vì vậy, có vẻ như chỉ có một nửa số điểm chính xác nổi được phép trên iPad2. Một điều nữa cần đề cập: Công cụ báo cáo thông báo "Không hợp lệ enum cho đối số 'loại'", nhưng nó vẫn hoạt động. Ah và một điều tuyệt vời khác cũng là glreadpixels, không chỉ hoạt động khi sử dụng GL_FLOAT như định dạng GL_HALF_FLOAT_OES kết quả ở các số dấu phẩy động khác nhau. Cảm ơn bạn rất nhiều! – RayDeeA