swfmillで圧縮swfが生成されてしまう

4月 22nd, 2008 tocmoc

Flash Lite 1.1では,圧縮されたswfが表示できない.
swfmillを使ってswfを生成したりすると,圧縮がかかっていたりするので,端末で表示できない.xmlのオプションで指定できるかと思ったが,どうにも分からない.

そこで,flasmを使って逆アセンブルした.flmの結果を見てみると,冒頭にcompressedという記述が見える.

CODE:
  1. movie 'hoge.swf' compressed // flash 4, total frames: 1, frame rate: 12 fps, 240x240 px
  2.  

ためしにcompressedをエディタで消して,

CODE:
  1. flasm -a hoge.flm

としてアセンブルしてみると,flash lite 1.1で表示できるようになった.

よくよく見たらflasmには圧縮を解除するオプションがあって

CODE:
  1. flasm -x hoge.swf

とすれば,swfの圧縮を解除できるようだ.

スリープ関数

2月 29th, 2008 tocmoc

windowsでは,windows.hをインクルードする.
SleepのSは大文字で.

void Sleep(int milliseconds)


#include <windows.h>

// 100ミリ秒のスリープ
Sleep(100);

bbファイル

1月 7th, 2008 tocmoc

画像サイズ(バウンディングボックス)を定義するbbファイルを作る方法. 

コマンドだとebb.exeだけど,GUIでやりたい場合には,dvioutをインストールしたフォルダにCreateBB.exeというソフトが付いてきている.

このソフトを使えば,フォルダを指定してbbファイルを作ったり,個々のファイルを指定してbbファイルを作ったりできる.

  • Browseボタンでフォルダを指定
  • FileTypeボタンを開いて検索したい形式にチェック
  • フォルダを再帰的に検索したい時はSearch Folder Recursivelyにチェック
  • CreateBBボタンで実行

jpgが変換できずにERROR CODE=5とか出た場合は,プラグインが入っていないので,Susieプラグインを入れる.dvioutのフォルダに*.spiを入れておけばいい.

emacsのauto-fill-mode 再整形

12月 30th, 2007 tocmoc

auto-fill-modeがONになっている時,段落の再整形をするには,M-q.(もしくはAlt-q)

ウィンドウのサイズ

12月 3rd, 2007 tocmoc

ウィンドウのサイズを初期化するには, 
 

C++:
  1. glutInitWindowSize(width, height);

後からウィンドウのサイズを変更するには,
 

C++:
  1. glutReshapeWindow(width, height);

両面を描くか片面だけ描くか

11月 20th, 2007 tocmoc

カリング処理.

 両面を描きたいとき(カリング処理なし)は,オフにするだけ.

CODE:
  1. glDisable(GL_CULL_FACE);

 カリング処理をしたい時には,glCullFace()を使う.
glCullFace()では,引数に描かない面を指定する.
面の頂点は時計と反対周りに統一しておくことに注意.

表(オモテ)面だけ描きたい時は

CODE:
  1. glEnable(GL_CULL_FACE);
  2. glCullFace(GL_BACK);

裏(ウラ)面だけ描きたい時は

CODE:
  1. glEnable(GL_CULL_FACE);
  2. glCullFace(GL_FRONT);

タイマー

11月 16th, 2007 tocmoc

処理時間を計るのにマルチメディアタイマtimeGetTime()を使っていたりしたけど,最近はQueryPerformanceCounterを使ったりするのね

使い方は以下みたいな感じ.

C++:
  1. LARGE_INTEGER nFreq, nStart, nStop;
  2. LARGE_INTEGER elapsed;
  3. int dTime;
  4.  
  5. ::QueryPerformanceCounter(&nStart);
  6. ::QueryPerformanceFrequency(&nFreq);
  7.  
  8. Sleep(100);
  9.  
  10. ::QueryPerformanceCounter(&nStop);
  11.  
  12. elapsed = (nStop.QuadPart - nStart.QuadPart) * 1000 / nFreq.QuadPart;
  13.  
  14. if (elapsed.HighPart != 0) dTime = -1;
  15. else dTime = elapsed.LowPart;
  16.  
  17. printf("%d ミリ秒\n", dTime);
  18.  

MSDNライブラリ
http://msdn2.microsoft.com/en-us/library/ms644905.aspx

 2007/11/28 追記

windows.hをインクルードしておくこと!

直線と点の距離

11月 16th, 2007 tocmoc

2点を通る直線と点の距離

C++:
  1. double distPointToLine(Point la, Point lb, Point p)
  2. {
  3.   return abs(crossProduct(lb-la, p-la)) / abs(lb-la);
  4. }

2点を結ぶ線分と点の距離

C++:
  1. double distPointToLineSegment(Point la, Point lb, Point p)
  2. {
  3.   if ( dotProduct(lb-la, p-la)> EPSILON ) return abs(p-la);
  4.   if ( dotProduct(la-lb, p-lb)> EPSILON ) return abs(p-lb);
  5.   return abs(crossProduct(lb-la, p-la)) / abs(lb-la);
  6. }

(※) 内積dotProduct()と外積crossProduct()は適宜自分で作る

VCでコマンドライン引数を渡したい

11月 15th, 2007 tocmoc

「プロジェクト」→「プロパティ」→構成プロパティ「デバッグ」→「動作」→「コマンド引数」

に書く

ドロネー分割

11月 13th, 2007 tocmoc

ドロネー三角形分割(デローニー分割)の説明&C++版コード

http://www.codeguru.com/cpp/cpp/algorithms/general/article.php/c8901/