原点に存在するものが絶対に見える条件

transform-matrix-visible.png

必須条件

  • glViewPort(0,0,ウィンドウ幅,ウィンドウ高さ);は不動(いつ、いかなるときも同じ)
  • fovy(field of view)は正の値1
  • nearとfarは正の値
    • かつ、near<farである。

必須ではないが、間違えるとマウス入力と3次元空間での辻褄が合わなくなる条件

  • gluLookAt(カメラX,カメラY,カメラZ…);のカメラZが正
  • あるいはglTranslatef(0,0,負)

gluLookAtでカメラ位置を渡すときはでglTranslateでカメラ位置のつもりをするときはになる、のが注意。

困ったときのお助けコード

これなら絶対に原点にあるものは見える!!
かつ、マウス入力と画面が感覚的に一致。
glCullFace(GL_BACK);でカリングされるものにも納得

void reshape(){
glViewPort(0,0,w,h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(35.0,w/h,1.0.20.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt(0,0,2.0,0,0,0,0.0f,1.0f,0.0f);
}

camera

サポートサイト Wikidot.com camera