Bắt đầu bằng cách tìm tất cả các nhóm đối tượng, trong đó một nhóm đối tượng là một tập hợp các đối tượng trùng nhau. Phát hiện va chạm tiêu chuẩn nên làm công việc. Chỉ định cho mỗi nhóm một màu duy nhất. Bất kỳ màu nào sẽ làm.
Kết xuất tất cả các đối tượng của bạn dưới dạng màu đơn sắc, sử dụng màu nhóm, thành một kết cấu.
Tạo một kết cấu phác thảo mới với cùng kích thước với mục tiêu kết xuất. Quét qua từng texel của mục tiêu kết xuất và xác định xem đó có phải là màu khác với bất kỳ texels xung quanh nào không. Nếu có, thay đổi texel tương ứng trong kết cấu phác thảo thành màu đường bạn muốn.
Cuối cùng, lấy kết cấu phác thảo này và hiển thị nó trên đầu của hình ảnh bạn muốn vẽ trên màn hình (tất nhiên bạn có thể làm điều này cùng lúc với phát hiện cạnh trong một shader mảnh và tránh tạo kết cấu cạnh trong lần đầu tiên địa điểm).
Nếu bạn thực hiện bước này trên cpu bằng cách sử dụng vòng lặp for để đi qua các texels của mục tiêu kết xuất, thì điều này sẽ khá chậm, nhưng có lẽ đủ tốt để kiểm tra và thậm chí sử dụng trong một số trường hợp. Để sử dụng điều này trong thời gian thực, bạn sẽ tốt nhất để xử lý việc này trong một shader.
Một shader mảnh để thực hiện phát hiện cạnh này có thể trông như thế này;
precision mediump float;
uniform sampler2D s_texture;
varying vec2 v_texCoord;
void main()
{
gl_FragColor = vec4(0.0);
vec4 baseColor = texture2D(s_texture, v_texCoord);
gl_FragColor += baseColor - texture2D(s_texture, top);
gl_FragColor += baseColor - texture2D(s_texture, topRight);
gl_FragColor += baseColor - texture2D(s_texture, right);
gl_FragColor += baseColor - texture2D(s_texture, bottomRight);
gl_FragColor += baseColor - texture2D(s_texture, bottom);
gl_FragColor += baseColor - texture2D(s_texture, bottomLeft);
gl_FragColor += baseColor - texture2D(s_texture, left);
gl_FragColor += baseColor - texture2D(s_texture, topLeft);
}
Trong đó giá trị thứ hai trong texture2D tra cứu là tọa độ 2d so với v_texCoord. Bạn sẽ áp dụng điều này bằng cách hiển thị mục tiêu kết xuất đầu tiên dưới dạng kết cấu trên một màn hình toàn màn hình. Điều này tương tự như cách bạn sẽ áp dụng các hiệu ứng làm mờ toàn màn hình như làm mờ guassian.
Lý do để sử dụng mục tiêu kết xuất đầu tiên với màu sắc đơn giản chỉ để đảm bảo rằng không có cạnh nhận biết giữa các đối tượng khác nhau trùng nhau. Nếu bạn chỉ đơn giản thực hiện phát hiện cạnh trên hình ảnh màn hình, bạn có thể sẽ thấy rằng nó cũng phát hiện các cạnh ở các phần chồng lấp (giả sử các đối tượng có màu sắc / kết cấu / ánh sáng khác nhau).