理解Cocos2d-x坐标系统

来源:互联网 发布:婆媳矛盾 知乎 编辑:程序博客网 时间:2024/06/07 20:12

坐标系Coordinator

这个概念非常普遍,而且非常的常用,使用过二维绘图、三维绘图的应该都不陌生。

笛卡尔坐标系:这个接触过OpenGL的都不陌生,以左下角为原点,x向右,y向上,z向外,符合右手定则。Cocos2d使用的就是此坐标系,原点为左下角,x向右,y向上。

屏幕坐标系:与笛卡尔坐标系不同,以左上角为原点,x向右,y向下,这个是常用的开发中的坐标系。


世界坐标系和本地坐标系

世界坐标系,任何一个物体都存在一个世界中,任何一个点在世界中都是唯一的,然而,这个唯一点在使用时不一定是最方便的,很大一部分使用的是相对坐标系,也说本地坐标系。这一概念无论是二维绘图还是三维绘图都是成立的。


锚点AnchorPoint

接触过二维绘图的应该比较熟悉,一个图元,加入到图层或者场景中时,除了指定position之外,还有一个重要的概念就是锚点,一般在图元的转换中使用较多,如旋转、拉伸等。Cocos2d中,把一个节点加入到父节点时,要指定位置,这个位置就是锚点的位置。Cocos2d中的锚点参数是一个比例因子,在0~1之间。默认情况下,Layer的锚点在(0, 0),其他的则在(0.5, 0.5)。并且,Layer的锚点在设置时,需要调用ignoreAnchorPointForPosition( false ),然后调用setAnchorPoint()。


坐标点转换问题(convertToNodeSpace和convertToWorldSpace的区别)

convertToWorldSpace:将坐标转换成世界坐标,也就是世界坐标系下的点。查阅源码,这个函数的实现,有一个对矩阵转换的一个遍历乘积。

Mat4 Node::getNodeToWorldTransform() const{    Mat4 t = this->getNodeToParentTransform();    for (Node *p = _parent; p != nullptr; p = p->getParent())    {        t = p->getNodeToParentTransform() * t;    }    return t;}
举例来说,把一个节点,加入到parent中,可以使用getPosition获得这个相对于父节点的坐标点,使用parent调用该函数可以得到该节点的世界坐标。

convertToWorldSpace:将坐标转成相对坐标,可以把世界坐标转换成相对坐标。继续上面的例子,使用parent调用该函数,将转换后的世界坐标转换回原相对坐标。

0 0
原创粉丝点击