2011-07-28 10 views
0

ここでは、簡単なOpenGLES iPadサンプルを作成しました。iPadでglFrustumfを設定する方法

//---------------------------------------- 
glMatrixMode(GL_PROJECTION); 
glLoadIdentity(); 

glFrustumf(-1, 1, -1, 1, 0, 20); 
glMatrixMode(GL_MODELVIEW); 

static const GLfloat squareVertices[] = { 
    -0.5f, -0.33f,1.6, 
    0.5f, -0.33f,1.6, 
    -0.5f, 0.33f,1.6, 
    0.5f, 0.33f,1.6 
}; 

glMatrixMode(GL_MODELVIEW); 
glLoadIdentity(); 
. . . . . . . 
. . . . . . . 
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); 

//---------------------------------------- 

MacサンプルでgluLookAtを使用しましたが、iPadでは見つかりませんでした。上記のコードの基本的な誤りは何ですか?なぜ正方形が見えないのですか?

頂点配列のz値を変更すると、正常に動作します。

static const GLfloat squareVertices[] = { 
    -0.5f, -0.33f,0.5, 
    0.5f, -0.33f,0.5, 
    -0.5f, 0.33f,0.5, 
    0.5f, 0.33f,0.5 
    }; 

私はz値の範囲は0-20、ここでは1.6、その範囲内であるべきだと思いました。私は今頂点の値を変更するのは好きではありません。 glFrustumfの設定を手伝ってください。

答えて

1

glFrustumに渡されるnear値とfar値は、オブジェクト空間の絶対座標ではありません。それらは、カメラから遠くの平面までの距離です。つまり、カメラの位置がどこで、どの方向が指し示されているか分からない限り、az座標が1.6であるとは言えません。

たとえば、カメラが(0,0、 -19)は0と20をglFrustumに近づけ、オブジェクト空間では-19(-19 + 0)、遠方の平面は1(-19 + 20)になります。そのような場合、z = 1.6の正方形は遠い平面を通過するが、z = 0.5の正方形は円錐台の内側にある。同様に、あなたのカメラがglFrustumと同じ値で(0,0,1)であった場合、オブジェクト空間では、near planeは1になり、farは-19になり、0.5が入り、1.6が出ます。

+0

あなたより良い返信 – Guru

関連する問題