首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> VC >> 關於VC++

遊戲中滑鼠物件選取的四大演算法比較

     編輯:關於VC++

核心問題

將螢幕座標(滑鼠位置)映射到遊戲世界中的邏輯物件,是幾乎所有遊戲必須解決的基本議題。

四種主流方法

方法原理優點缺點適用場景
1. 包圍盒/框 為每物件建立矩形/球體包圍體,判斷點是否內含 簡單、效率高(O(n)) 精度低、無法處理不規則形狀細節 2D/3D 物件數較少、形狀規則
2. 像素級枚舉 遍歷可見物件,檢測滑鼠座標對應像素是否非透明/有效 Z 值 精確至像素 效率極低 通常配合包圍盒做二階段篩選
3. 回饋緩衝區 離屏渲染時寫入物件 ID 到專用緩衝區,讀取滑鼠對應像素的 ID 像素級精度、幾乎零額外效能損耗、OpenGL 內建支援 需完全控制渲染管線 3D 遊戲、複雜場景、即時策略遊戲
4. 直接映射(空間索引) 場景以二維/多層陣列儲存,座標直接換算陣列索引 O(1) 查詢、極快 限網格化場景、記憶體較大 棋類、戰棋、固定視角 3D

實務組合策略

  • 第一階段:包圍盒快速剔除
  • 第二階段:回饋緩衝區或像素檢測精確鎖定
  • 框選:以包圍盒與選取矩形相交判斷

2D 回饋法偽代碼實作

color buffer[H][W];          // 後台緩衝區
color trans = RGB(0,0,0);    // 定義透明色
object list[N];              // 繪製順序列表
stack picked;                // 結果堆疊

color old = buffer[mx][my];
buffer[mx][my] = trans;

for (i=0; i

延伸:框選

將單點判斷擴展為矩形區域,配合上述任一方法即可實現多選。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved