-->

What are good reasons to enable 2D projection with

2019-02-18 00:26发布

问题:

In cocos2d-iphone the default projection type is "3D" projection. But you can also set the projection to "2D" like so:

[[CCDirector sharedDirector] setProjection:CCDirectorProjection2D];

Behind the scenes the 3D projection uses perspective projection whereas 2D projection is the OpenGL orthographic projection. The technical details about these two projection modes can be reviewed here, that's not what I'm interested in.

What are the benefits and drawbacks of 2D projection for cocos2d users? What are good reasons to switch to 2D projection?

Personally I've used 2D projection to be able to use depth buffering for isometric tilemaps. Isometric tilemaps require this for correct z ordering of tiles and objects on the tilemap.

I've also used 2D projection with depth buffering in non-tilemap projects to get complete z order control via the vertexZ property. This project used a pseudo isometric display where the vertexZ of an object is based on its Y coordinate.

That means I've been using 2D projection only to be able to use the vertexZ property, which also requires enabling depth buffering. Are there any other reasons one might want to switch to 2D projection?

回答1:

Switching to 2D projection is a life saver in the following scenario:

  1. You create a big CCRenderTexture

  2. You draw a bunch of stuff on it, either using [... visit] or OpenGL drawing functions

  3. You add the render texture to your layer, e.g., in order for the things you drew in point 2. to serve as the background for your game.

With 3D projection, the texture will be rendered with vertical and/or horizontal fault lines. See e.g., http://www.cocos2d-x.org/boards/6/topics/16197 which is for cocos2d-x but I have observed the same effect also for cocos2d-iphone and setting the projection to 2D got rid of the problem.



回答2:

I have switched to 2D projection as the only means to resolve font rendering issues with CClabels, both font file and TTF-based labels. This is not always the cause of a font issue, but it has resolved some problems for me when all else failed.