0

Core Animation から OpenGL ES 1.1 に変換する拡張現実 iPhone アプリがあります。Apple OpenGL テンプレートから変更されたコードを追加しました。

私の問題は、負の Z 軸 (ユーザーから離れた方向) に沿って移動すると、完全になくなるまで、3D オブジェクトがカメラ ビューに消えてしまうことです。私はいくつかの解決策を試しましたが、役に立ちませんでした。

私が決定したこと:

Jeff Lamarche のブログ (こちら) の 3D 正二十面体を使用すると、オブジェクトは 0,0,0 から始まり、z 座標が減少する方向に移動します。z 値が -2.0f に達するまでに、オブジェクトはなくなります。カメラビューの後ろに消えているように見えます。これは、私がフラストラムとビューポートを設定する方法です(Appleのコードから変更されていません)

glMatrixMode(GL_PROJECTION); サイズ = zNear * tanf(DEGREES_TO_RADIANS(fieldOfView) / 2.0);

//Grab the size of the screen
CGRect rect = self.bounds;
glFrustumf(-size, size,
           -size / (rect.size.width / rect.size.height),
           size / (rect.size.width / rect.size.height),
           zNear, zFar);
glViewport(0, 0, rect.size.width, rect.size.height);

glMatrixMode(GL_MODELVIEW);
glLoadIdentity();

私が試したこと:カメラビューがメインビューで、openGLViewを含む他のいくつかのビューがサブビューとして追加されます。テスト目的で、これらのビューをコメントアウトしました。CATransforms を適用して openGLView を z 方向 -500 および +500 に移動し、カメラ ビューにも同じことを行いました。また、上記のコードの zFar を 1.0f に変更しましたが、それでも z 位置 -2.0 で消えてしまい、意味がありません (z=1.0 で消えるべきではありませんか?)。

私の実験は、私が始めたときよりも私を混乱させました(これは通常、重要な部分が欠けていることを意味しますが、何がわからないのですか). ご協力いただきありがとうございます。

4

1 に答える 1

1

zFar 値に 1000 などの非常に大きな値を指定します。

ちなみに、フラスタムの z 値は -zNear と -zFar として指定する必要があります。したがって、オブジェクトを遠ざける必要がある場合は、シーンをサポートするために z 値を負の値にする必要があります。したがって、-(-zFar) はより大きな正の値になります。

于 2011-07-23T14:34:16.577 に答える