每物件建立包圍矩形/球體,遍歷判斷滑標座標是否落入。
優點:簡單、矩形包圍盒且物件少時效率高。
缺點:精度不足,無法像素級選取。
2D 用矩形組合,3D 用 AABB/OBB/包圍球。
遍歷所有可見物件,逐像素/面片測試 (2D 檢查 Alpha,3D 射線三角形相交)。
優點:像素級精確。
缺點:效率極低。
實務常配合包圍盒法先篩選候選物件,再精確測試。
繪製時同步寫入物件 ID 至後台緩衝區 (Alpha/Z-buffer/Stencil),讀取滑標對應像素即知選中物件。
優點:精確到像素、幾乎無效能損耗。
缺點:需高度控制繪圖管線。
OpenGL 內建 glRenderMode(GL_FEEDBACK),DirectX 可用 Z-buffer/Stencil 實現。
場景以二維陣列/多層陣列儲存,滑標座標直接換算陣列索引讀取物件。
優點:O(1) 時間複雜度。
缺點:限制物件排列方式、記憶體需求大。
適用:棋盤遊戲、固定視角策略遊戲。
實務常組合使用:包圍盒粗篩 → 回饋/列舉精選;範圍選取 (框選) 可由基本演算法延伸。
color trans = RGB(0,0,0); // 透明色
color buf[H][W]; // 後台緩衝
int x, y; // 滑標座標
object array[N]; // 物件陣列
stack objstack; // 選中物件堆疊
color old = buf[y][x];
buf[y][x] = trans;
for (i = 0; i < N; i++) {
draw(array[i]);
if (buf[y][x] != trans) {
old = buf[y][x];
buf[y][x] = trans;
objstack.push(array[i]);
}
}
buf[y][x] = old;
// objstack 依繪製順序儲存所有滑標下物件,取所需者即可