1

ビューポートの 3/4 の高さに道路の消失点があり、最も近い道路の端がビューポートの下側​​にある道路ポリゴン (長方形 3.f * 100.f) を表示するビューが必要です。私がやりたいことの例については、Crazy Taxi ゲームを参照してください。

iPhone SDK 3.1.2 のデフォルトの OpenGL ES プロジェクト テンプレートを使用しています。

射影行列を次のように設定します。

glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glFrustumf(-2.25f, 2.25f, -1.5f, 1.5f, 0.1f, 1000.0f);

次に、glRotatef を使用してランドスケープ モードを調整し、カメラをセットアップします。

glMatrixMode(GL_MODELVIEW);

glLoadIdentity(); glRotatef(-90, 0.0f, 0.0f, 1.0f);

const float cameraAngle = 45.0f * M_PI / 180.0f; gluLookAt(0.0f, 2.0f, 0.0f, 0.0f, 0.0f, 100.0f, 0.0f, cos(カメラ角度), sin(カメラ角度));

私の道路ポリゴン三角形ストリップは次のようなものです:

static const GLfloat roadVertices[] = {

-1.5f、0.0f、0.0f、1.5f、0.0f、0.0f、-1.5f、0.0f、100.0f、1.5f、0.0f、100.0f、};

そして、gluLookAt の適切なパラメーターが見つからないようです。私の消失点は常に画面の中央にあります。

4

1 に答える 1

2

これを本物の3Dでやりたいですか?基本的に、ポイントの見方は画面の中央です。あなたが望むのは、地平線の下の画面の4分の1です。

投影とビュー(基本的に非投影)によって最終位置を反転することで、それを解決できます。

画面がxで-1.0fから1.0fに、yで-1.0fから1.0fに伸びると仮定すると、地平線を(0.0f、0.5f)に移動する必要があります。これは、画面の4分の1(つまり、-0.5f)を見下ろす必要があることを意味します。与えられたzに対して(ランダムに0.5fを選択します)。したがって、すでに定義したビューと「単位」行列および「射影」行列を取得すると、次のようにgluUnprojectを介してこれを渡すことができます。

GLdouble eyeX, eyeY, eyeZ;
gluUnproject( 0.0f, -0.5f, 0.5f, identity, view, projection, &eyeX, &eyeY, &eyeZ );

次に、目の値をgluLookAtに接続し直すと、路面の下のポイントが表示されます。

他にも無数の方法があると思いますが、それでもうまくいくはずです...

于 2009-12-08T16:18:32.870 に答える