今、「クリッピング」と「残像」の整合性をとろうと工夫しているのだが、大変なことがわかった。いまのデータ構造だけでは、残像をクリッピングできないのだ。
というのは、残像自体は作図手順による構造は保存されておらず、単に「Δt秒前の点や線の座標」を記録しておいてそれを表示しているに過ぎないのだ。しかし、クリッピングの場合は、作図の構造を用いて両端を決定している。だから、「残像をクリッピングする」と言うのはたやすいのだが、何か裏技を仕掛けないといけない状況なのだ。残像のデータ構造を今からすべて変える、という方法もありうるが、作業量の膨大さを想像すると、あまりしたくない。
クリッピングの両端の座標をどこかにとっておく、というのはどうか。それならうまくいくかも。うーむ。この線でやっていくより仕方あるまい。
(8月10日、阿原)
というのは、残像自体は作図手順による構造は保存されておらず、単に「Δt秒前の点や線の座標」を記録しておいてそれを表示しているに過ぎないのだ。しかし、クリッピングの場合は、作図の構造を用いて両端を決定している。だから、「残像をクリッピングする」と言うのはたやすいのだが、何か裏技を仕掛けないといけない状況なのだ。残像のデータ構造を今からすべて変える、という方法もありうるが、作業量の膨大さを想像すると、あまりしたくない。
クリッピングの両端の座標をどこかにとっておく、というのはどうか。それならうまくいくかも。うーむ。この線でやっていくより仕方あるまい。
(8月10日、阿原)
クリッピングの両端の座標をとっておく方法を試してみた。GLineのメンバー変数に
double afterimage_x1;
double afterimage_y1;
double afterimage_x2;
double afterimage_y2;
というのを追加。これで、クリッピング時の両端の座標をベタに保存しておく。(直線が複素係数になっているときには使わない。)
これを、MyCanvas::DrawOneLine(GLine*)の中で「本体であって、かつクリッピングがOn、かつ描画に成功した」ときに限り、その両端の座標を上の変数に保存しておくことにする。
本体でなく残像の時には、icsのデータは使わないことにし、したがって、NOicsを使って、残像であることのフラグの代わりにした。(NOicsが負の時にはその直線は残像。)
「クリッピングかつ残像」の時には、上の変数のデータのみを用いて描画する。
このやりかたであえなく成功。
これを、MyCanvas::DrawOneLine(GLine*)の中で「本体であって、かつクリッピングがOn、かつ描画に成功した」ときに限り、その両端の座標を上の変数に保存しておくことにする。
本体でなく残像の時には、icsのデータは使わないことにし、したがって、NOicsを使って、残像であることのフラグの代わりにした。(NOicsが負の時にはその直線は残像。)
「クリッピングかつ残像」の時には、上の変数のデータのみを用いて描画する。
このやりかたであえなく成功。