UI坐标与OpenGL坐标
UI坐标
OpenGL坐标
OpenGL坐标转化UI坐标就是屏幕的高度减去OpenGL的y轴方向坐标,就是UI坐标下的y轴方向坐标,与之对应UI坐标转OpenGL坐标是高度减UI坐标。
从UI坐标到OpenGL坐标的转换:
Vec2 touchLocation=touch->getLocationView();
Vec2 touchLocation=Director::getInstance()->convertToGL(touchLocation);
OpenGL坐标
OpenGL坐标可以分为:世界坐标和模型坐标,所以Cocos2d-x的坐标也有世界坐标和模型坐标。
世界坐标,地球作为参考物。
向南走一公里,再向东走500米。
模型坐标(本地坐标),参照物是本身。
向右走一公里,再向左走500米。
实例:
如果采用A的模型坐标来描述B的位置,则B的坐标是(1,-1)。
世界坐标和模型坐标
世界坐标和模型坐标可以相互转换。我们通过Node对象如下函数实现:
- Vec2 convertToNodeSpace(const Vec2&worldPoint)。将世界坐标转换为模型坐标。
- Vec2 convertToNodeSpaceAR(const Vec2&worldPoint)。将世界坐标转换为模型坐标。AR表示相对于锚点。
- Vec2 convertTouchToNodeSpace(Touch* touch)。将世界坐标中触摸点转换为模型坐标。
- Vec2 convertTouchToNodeSpaceAR(Touch* touch)。将世界坐标中触摸点转换为模型坐标。AR表示相对于锚点。
- Vec2 convertToWorldSpace(const Vec2& nodePoint)。将模型坐标中触摸点转换为世界坐标。
- Vec2 convertToWorldSpaceAR(const Vec2& nodePoint)。将模型坐标中触摸点点转换为世界坐标。AR表示相对于锚点。
世界坐标转换为模型坐标
实例:
Node1和Node2大小是300x100像素。
Node2的世界坐标转换为相对于Node1的模型坐标。
Vec2 point1=node1->convertToNodeSpace(node2->getPosition());
不带AR表示相对于原点坐标,A是Node1的原点。
A(100,400)
C(200,300)
point1(100,-100)
Vec2 point2=node1->convertToNodeSpaceAR(node2->getPosition());
带AR表示相对于锚点坐标,B是Node1的锚点。
B(400,500)
C(200,300)
point2(-200,-200)
模型坐标转世界坐标
实例:
Node1的坐标是(400,500),大小是300x100像素,Node2是放置在Node1中的,它对于Node1的模型坐标是(0,0),大小的150x50像素。
把Node2相对于Node1的模型坐标转换成世界坐标。
Vec2 point1=node1->convertToWorldSpace(node2->getPosition());
node2->getPosition()得到的坐标(0,0)是Node2相对于Node1原点A点的坐标。与A点重合,把它转换成世界坐标,即为A点坐标。
point1(250,450)
Vec2 point2=node1->convertToWorldSpaceAR(node2->getPosition());
node2->getPosition()得到的坐标是Node2相对于Node1锚点的坐标。
point2(400,500)