3Dプロジェクション(デフォルト):
- は
- ノードは、それらが追加された順序で描かれている固定されたカメラの位置と視点とのOpenGLの透視投影を使用しノード階層。描画順序には、
zOrder
プロパティを使用して影響を与えることができます。 zOrder
は、addChild:z:
のzと同じです。直接バックプレーン上で、たとえば、あなたはあなたのノードが全て同じ深さで描かれていることを想像する必要があります絵を見てみると

。したがって、それらはすべて同じサイズで表示されます。ノードの正しい重なりは、各ノードを特定の順序でレンダリングするだけで達成されます。
vertexZ
を介してノードの真のOpenGLレンダリングの深度を変更することはできますが、3D投影によってノードがレンダリングされる効果がわずかにずれてしまうため、3D投影ではお勧めしません。
2D投影:
- は、OpenGL正射影を使用
- ノードは
zOrder
よりも優先さvertexZ
プロパティの順序で描画されています。
vertexZ
を変更すると、ノードのサイズにも影響します。 vertexZ
を変更すると、EAGLViewで正確なレンダリングを行うために深度バッファリングを有効にする必要があります。これは、アイソメのタイルマップでオーバーラップするタイルを正しくレンダリングするために最もよく使用されます。
- 2D投影をcocos3dで使用することはできません。
- CCCameraの動作が異なります。
- 3D、グリッドとカメラのアクション(ページめくりや波など)が2D投影で正しく動作しない、または動作が異なる、または3D投影にリセットされることさえあります。 2D投影で

今オフセットされているノード位置せずvertexZ
を使用して任意の深さでスプライトを移動させることができます。ただし、深度バッファリングを有効にしない限り、ノードはvertexZ
プロパティに応じて小さくまたは大きく表示されます。
任意のノードのvertexZ
プロパティを変更しない場合、2D投影は3D投影に同じ結果を与えるはずです。ただし、一部のノードまたはアクションで3D投影が正しく機能する必要がある場合があります。
OpenGL projection matricesについてのすべてのぎこちない詳細を知りたい場合は、この文の最後にあるリンクを確認してください。
両方の投影が同じ性能特性を持ちます。しかし、vertexZ
を使わないで2D Projectionを有効にするのは、通常、タイルマップを使って作業している場合にのみ意味があります。
短いストーリー:2Dプロジェクションでアプリが正常に動作し、徹底的にテストしてもバグがない限り、問題はありません。
しかし、これはiPad Retinaの正しい修正ではないと確信しています。私たちが3月16日まで知っているすべてのことは、iPad Retina Simulatorでのみ発生する問題かもしれません。また、retina mode function of CCDirectorを更新することで、問題が修正される可能性が高くなります。
ありがとうございます!これは非常に役に立ちます。私は待って、cocos2dがこれに対して公式の修正を提供するかどうかを見ていきます。もし私が言及したハックフィックスで私のゲームをリリースするのは大丈夫だろうと思いますか?私は市場の早い段階で利用できるようになるべく早くipad網膜版をリリースしたいと思っています。 – AbhinavVinay
私の経験では、kCCDirectorProjection3Dを設定すると、すべてのcocos2dシーンが非ピクセル完全な方法でレンダリングされます。彼らは少し大きく、少しぼやけています。これは、あなたが作成する各シーンに 'scene.vertexZ = -0.5f'を固定して設定します。これはkCCDirectorProjection2Dでは発生しません(scene.vertexZ = -0.5fを追加することで、最初からシーンが鮮明で完璧なピクセルになります)。 –