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

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/