私はタイル化されたレンダラーを機能させようとしていました (アイデアは、1 つの大きなビュー錐台をチャンクに分割して個別にレンダリングすることによってレンダリングすることです)。
私は、視野角を持つ標準的な透視投影を、glFrustum に渡すことができる左、右、上、および下のクリッピング プレーンに変換するコードを用意しました。
私はこれを適切に分解することに行き詰まりました。
私はタイル化されたレンダラーを機能させようとしていました (アイデアは、1 つの大きなビュー錐台をチャンクに分割して個別にレンダリングすることによってレンダリングすることです)。
私は、視野角を持つ標準的な透視投影を、glFrustum に渡すことができる左、右、上、および下のクリッピング プレーンに変換するコードを用意しました。
私はこれを適切に分解することに行き詰まりました。
いくつかの失敗の後、私は次のものを作成しました。
//"int rect[4]" is the pixel rectangle of the original view
//"int rect2[4]" is the pixel subrectangle within rect corresponding to the new view
//"left", "right", "bottom", and "top" are the left, right, bottom, and top clipping
// planes of the old view, respectively.
float diff_x = right - left;
float diff_y = top - bottom;
result_left = (float)(rect2[0] ) / (float)(rect[2]) * diff_x + left;
result_right = (float)(rect2[0]+rect2[2]) / (float)(rect[2]) * diff_x + left;
result_bottom = (float)(rect2[1] ) / (float)(rect[3]) * diff_y + bottom;
result_top = (float)(rect2[1]+rect2[3]) / (float)(rect[3]) * diff_y + bottom;