Re: hahaさんへのレス2(長文すみません)



[ このメッセージへの返事 ] [ 返事を書く ] [ home.html ]



投稿者: KIM @ moya.gw.hirosaki-u.ac.jp on 97/7/25 13:13:08

In Reply to: hahaさんへのレス(昨日の半透明ネタ・長文)

posted by KIM @ moya.gw.hirosaki-u.ac.jp on 97/7/25 12:08:11

> この状況で半透明というカッコいい見せ方を実現するには、どうすれば?
>
(予備知識:TOWNSの3万色320×240モードは
    512×256ドットの仮想画面をもっています)
サクサクいきます。
スクロールしない画面の半透明については、
上(レス1)で述べた機能(PASTEL)を使って簡単にできます。
といっても混色途中の様子が見えるのはカッコ悪いので、
仮想画面のうちの見えない所に描きます。      ↓ウインドウなので長方形
(描かれる範囲の画像を見えないところにコピー>描く画像を混色描画)
次にハードウェアスクロール面との半透明合成ですが、
基本的にはこれもコピーして先の見えない所に描いてある画像に
混色描画することになります。が、これはしつこいようですがスクロールしています。
それで、ハードウェアスクロール面が、画面に対してx、y何ドットスクロール
しているかを随時記録しておきます。(これはスクロールの制御のためにも必要)
ここで、たとえばx方向に480ドットスクロールしていたとき、
xが120ドットのウインドウを描こうとすると、(480+120=600、512より大)
仮想画面512ドットより先の画像はxが0からの領域に描かれていますので、
こちらからも画像をコピーしないと完全な半透明合成とはなりません。
これはyについても考えられますので、結果的には
1)x/y両方大丈夫な場合 2)xのみはみ出す 3)yのみ 4)両方はみ出す
の4通りが考えられ、2)3)は画像コピーが2回、4)は4回必要となります。
これらの画像を先の見えない所に描いてあるやつに混色描画して
半透明合成は終了、あとはコイツを本来ウインドウを描くはずの位置に
持ってくればいいだけです。\(^^)/

でもなぁ、名うてのプロのプログラマーなら
たぶんこれくらいのことは既に考えてるんでしょうねぇ。

> ちなみにそのゲームで、半透明を再現するにあたって
> 処理は、どれくらい遅くなったのでしょう?

486CPUのマシンでは、おかげさまで速度の低下を感じないほど速いです。
(0.1秒以下?)  ↓大きなウインドウを描いたとき
386CPUだと0.5秒強ですが、方向キー入力にウインドウ描画が
追随するような場合ではレスポンスが遅いという人もいると思うので
不透明/網目/半透明と切り替えられるようにしています。

ちなみに窓が中心から広がってくるような処理もできまっせ(^^)。
長文おつきあいいただき(しかもこれじゃ手前ミソの上塗りみたい^^;)
ありがとうございます。ではでは。
                  KIM