2012-03-09 11 views
2

私のcocos2dゲームでiPadの網膜ディスプレイをサポートする修正が見つかりました。私がipad網膜シミュレータでポートレートモードでゲームを走らせても、何も表示できませんでした。しかし、私はデフォルト設定をkCCDirectorProjection3DからkCCDirectorProjection2Dに変更したところ、正常に動作し始めました。誰でもkCCDirectorProjection2Dが何をしているのか知っていますか?

kCCDirectorProjection2D/kCCDirectorProjection3Dが正確に何をしたいのですか?デフォルト設定を変更すると問題が発生しますか?

おかげ Abhinav

答えて

5

3Dプロジェクション(デフォルト):

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

。したがって、それらはすべて同じサイズで表示されます。ノードの正しい重なりは、各ノードを特定の順序でレンダリングするだけで達成されます。

vertexZを介してノードの真のOpenGLレンダリングの深度を変更することはできますが、3D投影によってノードがレンダリングされる効果がわずかにずれてしまうため、3D投影ではお勧めしません。

2D投影:

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

enter image description here

今オフセットされているノード位置せず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を更新することで、問題が修正される可能性が高くなります。

+0

ありがとうございます!これは非常に役に立ちます。私は待って、cocos2dがこれに対して公式の修正を提供するかどうかを見ていきます。もし私が言及したハックフィックスで私のゲームをリリースするのは大丈夫だろうと思いますか?私は市場の早い段階で利用できるようになるべく早くipad網膜版をリリースしたいと思っています。 – AbhinavVinay

+1

私の経験では、kCCDirectorProjection3Dを設定すると、すべてのcocos2dシーンが非ピクセル完全な方法でレンダリングされます。彼らは少し大きく、少しぼやけています。これは、あなたが作成する各シーンに 'scene.vertexZ = -0.5f'を固定して設定します。これはkCCDirectorProjection2Dでは発生しません(scene.vertexZ = -0.5fを追加することで、最初からシーンが鮮明で完璧なピクセルになります)。 –

関連する問題