トップ 差分 一覧 ソース 検索 ヘルプ PDF RSS ログイン

Graphics_2D

2D graphicsのページ

ツール

ベクタ画像

Illustrator
Flash

フィルタ

Photoshop
Gimp

プログラム

GUI作成

デザイナ(C#とか)
WPF
Silverlight
Flash(ActionScript)
HTML/CSS

描画の高速化・安定化

ダブルバッファリング

ゲームループ中に大量の描画を行う場合、描画の過程が目についてチラつく。このため、実際の画面とは別の画面(画像)に一度描画し、その内容を画面に一気に反映させる(ループと画面への描画を1:1対応にする)ことでこの現象を解消することができる。フレームワークによっては勝手にこの処理を行ってくれたりもする(.netやAndroid

フォームの問題
Windowsのフォームアプリにおいて、コンテナに格納されたコントロールはコンテナが移動すればそれに追随して移動するが、各々の描画/移動タイミングが同一でないため、ぶれる。そのため、大量の物を描画するアプリでは結局自分でコントロールを描画することが求められる。
ループ処理とブロッキング
プログラム中で時間がかかる処理を行うと、描画処理を解決できないのでGUIが固まる。解決方法としては、マルチスレッドにするか、処理の最中にイベント(クリックやキー入力など)の取得+その動作処理を行う部分を挟むかのどちらかになる。後者は、C#であればApplication.DoEventメソッドを呼び出せばよい。
マルチスレッドでの問題
多くの場合、GUI用のクラスはスレッドセーフ(定義したスレッドと別のスレッドで操作可能)ではない。そのため、メインスレッドとは別のスレッドで行った処理をGUIに反映させるには、一時的にメインスレッドで操作を行うような命令を出す必要がある。例としては、BeginInvoke(C#)、Handler(java:Android)など。ゲームループ型のプログラムであれば、スレッドセーフなパラメータを操作して、メインループの中でその値の変化をチェックして反映させればよいため、特に面倒なことはないが、イベント型の場合は注意。
3D2D
DirectXは基本的に3D用のライブラリだが、ハードウェアリソースを利用できることや、GDIを介さないことから他の描画よりも高速な描画が可能なため、2Dの描画を行う上でも有用である。WPFはDirectXのラッパーであり、中身はDirectXである。初期設定などは3Dゆえの面倒さがあるが、回転/ズーム/視点変更が容易にできるため、ビューア系のアプリであれば十分元は取れる。

Copyright(C) by 芝浦工業大学 工学部通信工学科, 森野研究室. All Rights Reserved.