ウィンドウのサイズ

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);

glutで,stdlib.hのexitでエラー

10月 31st, 2007 tocmoc

VisualStudioでglutを使っている時に,次のようなエラーが出ることが多々ある.

CODE:
  1. c:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\include\stdlib.h(256): error C2381: exit' : 再定義 ; __declspec(noreturn) が異なります。
  2.  

次の項目をそれぞれ確認をする.多くの場合は1で解決できるようですが..

 1. stdlibやcstdlibのインクルード宣言を,glut.hのインクルードより前に書く.

C++:
  1. #include <stdlib>
  2. #inlcude <cstdlib>
  3. #include <gl /glut.h>

2. 新しいglut.hを持ってくる

3. glut.hの中で,次のように書かれている部分を,

C++:
  1. extern _CRTIMP void __cdecl exit(int);

次のように書き換える

C++:
  1. #if     _MSC_VER>= 1200
  2. _CRTIMP __declspec(noreturn) void   __cdecl exit(int);
  3. #else
  4. _CRTIMP void   __cdecl exit(int);
  5. #endif

glPointSize

3月 27th, 2007 tocmoc

 

C++:
  1. glPointSize(float size)

 glPointSizeの引数には,0.0よりも大きな値を指定する.(デフォルトは1.0)

この値は,スクリーンに描画されるピクセル幅の一辺で,
例えば2.0とすると,一辺が2ピクセルの,2x2ピクセルがポイントとして描かれる.

アンチエイリアシングを有効にしておけば,floatの値でも反映されるようになる.

ただ,ピクセル値指定なので,ポイント間のスキマが空いてしまったりする.もし縦横のグリッドを描きたいような場合は,GL_TRIANGLESとかGL_QUADSとかでポリゴンを作った方がキレイ.

エラーの表示

3月 6th, 2007 tocmoc

OpenGLのエラーを得るためには, 

GLenum glGetError(void void)

を使う.

C++:
  1. std::cout <<glGetError() <<std::endl;

とかやると,エラーの番号が返ってくる.例えば,1282とか.この数字を,16進数にすると,0x0502.そこで,OpenGLのヘッダGL.hを見てみると,下のようなエラーコードが書いてあるので,エラーは,GL_INVALID_OPERATIONということが分かる.

C++:
  1. /* ErrorCode */
  2. #define GL_NO_ERROR                       0
  3. #define GL_INVALID_ENUM                   0x0500
  4. #define GL_INVALID_VALUE                  0x0501
  5. #define GL_INVALID_OPERATION              0x0502
  6. #define GL_STACK_OVERFLOW                 0x0503
  7. #define GL_STACK_UNDERFLOW                0x0504
  8. #define GL_OUT_OF_MEMORY                  0x0505