Trong shader đoạn của tôi, tôi có thể tải một kết cấu, sau đó làm điều này:Cách lấy thông tin pixel bên trong trình đổ bóng phân đoạn?
uniform sampler2D tex;
void main(void) {
vec4 color = texture2D(tex, gl_TexCoord[0].st);
gl_FragColor = color;
}
Đó đặt pixel hiện nay với giá trị màu sắc của kết cấu. Tôi có thể sửa đổi chúng, vv và nó hoạt động tốt.
Nhưng một vài câu hỏi. Làm thế nào để tôi biết "tôi là" pixel nào? Ví dụ: giả sử tôi muốn đặt pixel 100,100 (x, y) thành màu đỏ. Mọi thứ khác với màu đen. Làm cách nào để tôi thực hiện:
"nếu currentSelf.Position() == (100,100); sau đó color = red; else color = black?"
?
Tôi biết cách đặt màu, nhưng làm cách nào để có được vị trí "của tôi"?
Thứ hai, làm cách nào để nhận các giá trị từ pixel lân cận?
Tôi cố gắng này:
vec4 nextColor = texture2D(tex, gl_TexCoord[1].st);
Nhưng không rõ ràng những gì nó đang trở lại? nếu tôi là pixel 100,100; làm thế nào để tôi nhận được các giá trị từ 101.100 hoặc 100.101?
đánh bại tôi vào nó; tất cả những gì tôi phải nói là khác với một chút so với đây là liên kết http://www.opengl.org/sdk/docs/manglsl/xhtml/gl_FragCoord.xml, nó đi vào chi tiết hơn một chút về 'gl_FragCoord' và đề xuất của một trung gian hiển thị kết cấu nếu anh ta thực sự muốn tính các đoạn đầu ra dựa trên sự kết hợp của nhiều pixel lân cận trong bộ đệm đầu ra khác. – Tommy
Về cơ bản những gì tôi muốn làm, là nếu pixel x, y có hàng xóm có màu đỏ trong chúng, để tăng màu đỏ trong x, y. Có hướng dẫn nào giải thích cách thực hiện điều này không? – user697111
@ user697111: Bạn muốn triển khai bộ lọc "giãn nở" hoạt động trên kênh màu đỏ của kết cấu. Google những từ khóa và bạn sẽ tìm thấy rất nhiều. – datenwolf