Mulailah dengan menemukan semua kelompok objek, di mana sekelompok objek adalah kumpulan objek yang tumpang tindih. Deteksi tabrakan standar harus melakukan pekerjaan. Tetapkan warna unik untuk masing-masing grup. Warna apa pun akan berhasil.
Jadikan semua objek Anda sebagai warna solid, menggunakan warna grup, menjadi tekstur.
Buat tekstur garis baru dengan dimensi yang sama dengan target render. Memindai melalui setiap texel dari target render dan menentukan apakah warnanya berbeda dengan setiap texel di sekitarnya. Jika ya, ubah texel yang sesuai dalam tekstur garis ke warna garis yang Anda inginkan.
Akhirnya, ambil garis besar tekstur ini dan render di atas gambar yang ingin Anda gambar di layar (Anda tentu saja bisa melakukan ini pada saat yang sama dengan deteksi tepi dalam shader fragmen dan hindari membuat tekstur tepi di pertama tempat).
Jika Anda melakukan langkah ini pada cpu dengan menggunakan for loop untuk melewati texels target render, maka ini akan sangat lambat, tetapi mungkin cukup baik untuk menguji dan bahkan digunakan dalam beberapa kasus. Untuk menggunakan ini dalam waktu nyata Anda sebaiknya menangani ini dalam shader.
Sebuah shader fragmen untuk melakukan deteksi tepi ini mungkin terlihat seperti ini;
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);
}
Di mana nilai kedua dalam pencarian tekstur2D adalah koordinat 2d relatif terhadap v_texCoord. Anda akan menerapkan ini dengan merender target render pertama sebagai tekstur pada quad layar penuh. Ini mirip dengan bagaimana Anda akan menerapkan efek buram layar penuh seperti guassian blur.
Alasan untuk menggunakan target render pertama dengan warna solid adalah hanya untuk memastikan bahwa tidak ada perbedaan antara objek yang berbeda yang tumpang tindih. Jika Anda hanya melakukan deteksi tepi pada gambar layar, Anda mungkin akan menemukan juga mendeteksi tepi pada tumpang tindih (dengan asumsi objek memiliki warna / tekstur / pencahayaan yang berbeda).