2010-11-22 1 views
11

私のインストラクターは、投影行列に影響を与えるために交換可能に使用できると教えています。彼は、gluLookAt()が好ましくは、視野角を規定するその能力に起因する「相対的な単純さ」のために使用されると主張している。これは本当ですか?私はgluLookAt()glFrustum()の両方を使用したコード例を見てきました。なぜプログラマーがそれらを混ぜるのだろうと思います。レッドブックのcube.c例でgluLookAt()とglFrustum()に違いはありますか?

などが表示されます:

void display(void) 
{ 
    glClear(GL_COLOR_BUFFER_BIT); 
    glColor3f(1.0, 1.0, 1.0); 
    glLoadIdentity(); 

    gluLookAt(0.0, 0.0, 5.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0); 
    **//why isn't this a call to glFrustum?** 
    glScalef(1.0, 2.0, 1.0); 
    glutWireCube(1.0); 
    glFlush(); 
} 

void reshape(int w, int h) 
{ 

    glViewport(0, 0, (GLsizei) w, (GLsizei) h); 
    glMatrixMode(GL_PROJECTION); 
    glLoadIdentity(); 
    glFrustum(-1.0, 1.0, -1.0, 1.0, 1.5, 20.0); 
    //why isn't this a call a call to gluLookAt()? 
    glMatrixMode(GL_MODELVIEW); 
} 
+1

ハム。 gluLookAtとglFrustumは非常に異なる行列を設定します(gluLookAtは一般に投影行列に適用されません)。インストラクターがgluLookAtの代わりにgluPerspectiveについて話していなかったと確信していますか? – Bahbar

+0

主な違いは、glFrustumはコアOpenGLライブラリの一部であり、gluLookAtは異なるパラメータセットをとり、glFrustumを呼び出すヘルパーライブラリの一部です。あなたが使っているOpenGLと違いはありません。選択はコーディングの好みの1つです。 – AndrewS

答えて

12

glFrustumgluLookAtの両方が単純マトリックス乗算を行います。これらの行列の方程式のmanページをチェックしてください:

gluLookAt

glFrustum

それらの両方がglMultMatrix*呼び出しに置き換えることができます。

最も重要な違いは、glFrustumが(gluPerspectiveによって内部的に使用される)透視投影行列を確立するためにほとんどの時間を使用することであり、gluLookAtは、モデルビュー行列を指定するための便利な方法である(通常:カメラを実現します)。

2

gluLookAtはModelViewマトリックスに影響しますが、glFrustum/gluPerspectiveはProjectionマトリックスに影響します。これらはパイプライン内の完全に2つの異なる行列です。 gluLookAtはユーティリティメソッドで、glRotateとglTranslateの呼び出しを組み合わせて、 "カメラ"を空間上の適切なポイントに移動し、それを目的の場所に向けます。一方、glFrustum/gluPerspectiveは、透視ビューボリュームを定義するメソッドです。詳しくは、OpenGL Red Bookをご覧ください。

+0

ハルム?これらの関数は、glMatrixModeによって設定された行列に影響します。 – AndrewS

関連する問題