有谁知道kCCDirectorProjection2D的作用?

时间:2012-03-09 00:55:38

标签: ipad cocos2d-iphone retina-display

我找到了修复我的cocos2d游戏支持iPad视网膜显示的方法。当我在ipad视网膜模拟器中以纵向模式运行游戏时,它无法显示任何内容。但当我将默认设置从kCCDirectorProjection3D更改为kCCDirectorProjection2D时,它开始正常工作。

我想知道kCCDirectorProjection2D / kCCDirectorProjection3D到底做了什么?更改默认设置会导致任何问题吗?

由于 阿比纳夫

1 个答案:

答案 0 :(得分:5)

3D投影(默认):

  • 使用具有固定摄像机位置和视点的OpenGL透视投影
  • 节点按照添加到节点层次结构的顺序绘制。您可以通过zOrder属性影响绘制顺序。 zOrderaddChild:z:中的z相同。

enter image description here

查看图片,您必须想象您的节点都是在相同深度绘制的,例如直接在背板上绘制。因此它们都以相同的尺寸出现。仅通过以特定顺序呈现每个节点来实现节点的正确重叠。

您仍然可以通过vertexZ更改节点的真实OpenGL渲染深度,但不建议在3D投影中使用,因为它会产生由于3D投影而导致节点稍微偏离其位置的效果。 / p>

2D投影:

  • 使用OpenGL正交投影
  • 节点按vertexZ属性的顺序绘制,该属性优先于zOrder
  • 更改vertexZ也会影响节点的大小。如果您确实更改了vertexZ,则必须在EAGLView中启用深度缓冲才能正确呈现。这通常用于正确渲染等距贴图中的重叠切片。
  • 您不能将2D投影与cocos3d一起使用。
  • CCCamera的行为会有所不同。
  • 3D,网格和相机操作(翻页,波浪等)在2D投影中无法正常工作或表现不同,甚至可能会重置为3D投影。

enter image description here

使用2D投影,您现在可以使用vertexZ在任何深度移动精灵,而不会偏移节点位置。但是,除非您启用深度缓冲,否则您的节点将显示为更小或更大,具体取决于其vertexZ属性。

如果您不更改任何节点的vertexZ属性,则2D Projection应该为3D Projection提供相同的结果。但是,某些节点或操作可能需要3D Projection才能正常工作。

如果您想了解有关OpenGL projection matrices的所有详细信息,请查看此句末尾的链接。

两个预测都具有相同的性能特征。但是,在不使用vertexZ的情况下启用2D投影通常仅在使用图块地图时才有意义。

长话短说:只要您的应用在2D投影中工作正常并且在彻底测试后没有显示错误,您应该没问题。

但我确定这不是iPad Retina的正确解决方案。据我们所知,直到3月16日,这可能只是在iPad Retina模拟器中出现的问题。而更有可能通过更新retina mode function of CCDirector确定问题。