我正在製作一個基於多維數據集的遊戲(所有東西都是一個立方體),並且目前正試圖通過不在視野外繪製東西來優化它。C++,OpenGL剪輯
以下內容僅適用於x和y平面,我會擔心後面的z ...所以現在只有邊裁剪。
我知道自己在世界上的位置和旋轉以及每個立方體的位置,因此我們的想法是比較玩家和立方體相對於玩家的z和x旋轉角度,並僅顯示在規定範圍內的立方體。
代碼時間:
// this is how I turn
float zrotrad = (float)zrot*DEG2RAD;
float view_limit = .4;
// distance between the cube and me
float dist_x = box_x-xpos;
float dist_y = box_y-ypos;
float dist_z = box_z-zpos;
// total distance (I'll use fast sqrt later)
float dist_tot = sqrt(dist_x*dist_x+dist_y*dist_y);
float angle = acos(dist_y/dist_tot);
// need to add 2 pies because acos returns a value [0,2PI]
float zcuberot = dist_x<0?2*PI-angle:angle;
if(zcuberot > zrotrad-view_limit && zcuberot < zrotrad+view_limit)
{
drawcube(box_x, box_y, box_z);
}
正如你可能已經明白,還有周圍0度的問題,因爲我的左視場限制爲否定而zcuberot被添加到其2個餡餅的範圍內得到弄糟。 359度同樣的故事 - 實際上因爲view_limit = .4
而減少。
我一直在這裏搞了2天,覺得自己像這樣一個啞巴問這個問題。
非常好,究竟是什麼我需要。 – Solenoid 2010-12-18 20:23:48