เริ่มต้นด้วยการค้นหากลุ่มวัตถุทั้งหมดโดยที่กลุ่มวัตถุคือกลุ่มของวัตถุที่ทับซ้อนกัน การตรวจจับการชนกันของมาตรฐานควรทำงาน กำหนดสีพิเศษให้แต่ละกลุ่ม สีใดจะทำ
แสดงวัตถุทั้งหมดของคุณเป็นสีทึบโดยใช้สีกลุ่มเป็นพื้นผิว
สร้างพื้นผิวเค้าร่างใหม่ที่มีมิติเดียวกับเป้าหมายการแสดงผล สแกนผ่านแต่ละ texel ของเป้าหมายการแสดงผลและพิจารณาว่าเป็นสีที่แตกต่างจาก texel ที่อยู่โดยรอบหรือไม่ ถ้าเป็นเช่นนั้นเปลี่ยน texel ที่เกี่ยวข้องในพื้นผิวเค้าร่างเป็นสีของเส้นที่คุณต้องการ
ในที่สุดนำเนื้อโครงร่างนี้มาวางไว้เหนือส่วนบนของภาพที่คุณต้องการวาดบนหน้าจอ (แน่นอนว่าคุณสามารถทำได้ในเวลาเดียวกับการตรวจจับขอบในส่วนที่แยกส่วนและหลีกเลี่ยงการสร้างพื้นผิวของขอบในครั้งแรก สถานที่).
หากคุณดำเนินการขั้นตอนนี้กับ cpu โดยใช้ for for loop เพื่ออ่านเท็กซัสของเป้าหมายการแสดงผลนี่จะค่อนข้างช้า แต่อาจดีพอที่จะทดสอบและใช้งานได้ในบางกรณี หากต้องการใช้สิ่งนี้ในแบบเรียลไทม์คุณควรจัดการสิ่งนี้ให้ดีที่สุดใน shader
ส่วนที่ทำหน้าที่ตรวจจับขอบนี้อาจมีลักษณะเช่นนี้
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);
}
โดยที่ค่าที่สองในการค้นหา texture2D เป็นพิกัด 2d ที่สัมพันธ์กับ v_texCoord คุณจะใช้สิ่งนี้โดยการเรนเดอร์เป้าหมายการเรนเดอร์แรกเป็นพื้นผิวในรูปแบบเต็มหน้าจอ สิ่งนี้คล้ายกับวิธีที่คุณใช้เอฟเฟ็กต์การเบลอภาพแบบเต็มหน้าจอเช่นภาพเบลอ guassian
เหตุผลที่ใช้เป้าหมายการเรนเดอร์แรกด้วยสีทึบนั้นเป็นเพียงเพื่อให้แน่ใจว่าไม่มีการรับรู้ของขอบระหว่างวัตถุต่าง ๆ ที่ทับซ้อนกัน หากคุณทำการตรวจจับขอบบนภาพบนหน้าจอคุณอาจจะพบว่ามันตรวจจับขอบที่เหลื่อมทับเช่นกัน (สมมติว่าวัตถุนั้นมีสี / พื้นผิว / แสงที่แตกต่างกัน)