私はキューブベースのゲームを作成しています(すべてが立方体です)、視野の外にアイテムを描画しないように最適化しようとしています。C++、OpenGL clipping
以下は、xとy平面にのみ適用されます。後でzについて心配します...今のところサイドクリッピングのみです。
世界の自分の位置と回転、それにすべての単一立方体の位置がわかっているので、プレーヤとキューブのzとxの回転角度をプレーヤと比較し、定義された範囲内のキューブ。
コード時間:私の左のフィールドビューの制限が負になると範囲が台無しに取得し、それに追加zcuberotは2つのパイを取得しますので、
// 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度周りの問題が、あります。 359度の同じ話 - 実際にはview_limit = .4
のために少ない
私はこれで2日間ぐっすり揺さぶられてきました。
私は欲しい。 – Solenoid