当前位置: 首页 > 编程笔记 >

Cocos2d-x学习笔记之世界坐标系、本地坐标系、opengl坐标系、屏幕坐标系

鞠建安
2023-03-14
本文向大家介绍Cocos2d-x学习笔记之世界坐标系、本地坐标系、opengl坐标系、屏幕坐标系,包括了Cocos2d-x学习笔记之世界坐标系、本地坐标系、opengl坐标系、屏幕坐标系的使用技巧和注意事项,需要的朋友参考一下

 cocos2d-x的坐标系很重要,想要学好该引擎,深入理解它的坐标体系很重要。注释写的很清楚了,对照上运行结果一块来看代码吧!

bool HelloWorld::init()
{
  bool bRet = false;
  do
  {

    CC_BREAK_IF(! CCLayer::init());
		//opengl的坐标系和世界坐标系相同,都是以屏幕左下角为原点,向右为x轴的增加方向,向上为y轴的增加方向
		//这里的世界指的是游戏世界
		//屏幕坐标系是以左上角为原点,是我们熟悉的
   //本地坐标系也叫节点坐标系,世界坐标系是相对于整体而言的,而本地坐标系是相对于父节点而言的,理解这点很重要

		//CCDirector::sharedDirector()->convertToGL() 转换到OPENGL坐标系
		//CCDirector::sharedDirector()->convertToUI() 转换到屏幕坐标系
		//CCNode::convertToWorldSpace()	把本地坐标系转换到世界坐标系
		//CCNode::convertToNodeSpace()	把世界坐标系转换到本地坐标系

		//sprite1、sprite2的图片大小是100,100
		CCSprite * sprite1 = CCSprite::create("image1.png");
		sprite1->setPosition(ccp(100,100));

		//将sprite2添加到sprite1节点中,这时候是以sprite1的左下角为原点,虽然sprite1的锚点是在它图片的中间
		CCSprite * sprite2 = CCSprite::create("image2.png");
		//setPosition中设置的坐标是sprite2的本地坐标
		sprite2->setPosition(ccp(100,100));
		sprite1->addChild(sprite2);

		//getPosition中获得的坐标也是sprite2的本地坐标
		CCPoint point = sprite2->getPosition();
		CCLog("point.x=%f,point.y=%f",point.x,point.y);

		//获得sprite2的opengl坐标系,屏幕坐标系,世界坐标系,本地坐标系

		//convertToWorldSpace的传入参数是sprite2的节点坐标系(本地坐标),也就是setPosition中传入的参数,而convertToNodeSpace的传入参数是sprite2的世界坐标系,看清谁是调用者,传入的参数又是什么
		CCPoint worldSpace = sprite1->convertToWorldSpace(point);
		CCPoint nodeSpace = sprite1->convertToNodeSpace(worldSpace);

		//以下俩个函数完成同样的功能,只不过这次的sprite2的坐标是基于sprite1的锚点的,而不是左下角了,所以我们传入了ccp(50,50)
		CCPoint worldSpaceAR = sprite1->convertToWorldSpaceAR(ccp(50,50));
		CCPoint nodeSpaceAR = sprite1->convertToNodeSpaceAR(worldSpaceAR);

		//convertToUI中传入的是opengl坐标系,因为opengl坐标和世界坐标系是相同的,所以我们传入世界坐标
		CCPoint ui = CCDirector::sharedDirector()->convertToUI(worldSpace);
		CCPoint opengl = CCDirector::sharedDirector()->convertToGL(ui);

		CCLog("opengl.x=%f,opengl.y=%f",opengl.x,opengl.y);
		CCLog("ui.x=%f,ui.y=%f",ui.x,ui.y);
		CCLog("worldspace.x=%f,worldspace.y=%f",worldSpace.x,worldSpace.y);
		CCLog("nodeSpace.x=%f,nodeSpace.y=%f",nodeSpace.x,nodeSpace.y);
		CCLog("worldspaceAR.x=%f,worldspaceAR.y=%f",worldSpaceAR.x,worldSpaceAR.y);
		CCLog("nodeSpaceAR.x=%f,nodeSpaceAR.y=%f",nodeSpaceAR.x,nodeSpaceAR.y);

		this->addChild(sprite1);

    bRet = true;
  } while (0);

  return bRet;
}
 类似资料:
  • 和视图一样,图层在图层树当中也是相对于父图层按层级关系放置,一个图层的position依赖于它父图层的bounds,如果父图层发生了移动,它的所有子图层也会跟着移动。 这样对于放置图层会更加方便,因为你可以通过移动根图层来将它的子图层作为一个整体来移动,但是有时候你需要知道一个图层的绝对位置,或者是相对于另一个图层的位置,而不是它当前父图层的位置。 CALayer给不同坐标系之间的图层转换提供了一

  • 在上一个教程中,我们学习了如何有效地利用矩阵的变换来对所有顶点进行变换。OpenGL希望在每次顶点着色器运行后,我们可见的所有顶点都为标准化设备坐标(Normalized Device Coordinate, NDC)。也就是说,每个顶点的x,y,z坐标都应该在-1.0到1.0之间,超出这个坐标范围的顶点都将不可见。我们通常会自己设定一个坐标的范围,之后再在顶点着色器中将这些坐标变换为标准化设备坐

  • 本文向大家介绍d3.js 坐标系,包括了d3.js 坐标系的使用技巧和注意事项,需要的朋友参考一下 示例 在正常的数学坐标系中,点x = 0,y = 0位于图形的左下角。但在SVG坐标系中,此(0,0)点位于“画布”的左上角,当您将位置指定为绝对/固定并使用顶部和左侧控制位置时,它有点类似于CSS。元素的确切点。 必须牢记的是,随着SVG中y的增加,形状会向下移动。 假设我们要创建一个散点图,每个

  • 本文向大家介绍百度坐标(BD09)、国测局坐标(火星坐标,GCJ02)、和WGS84坐标系之间的转换,包括了百度坐标(BD09)、国测局坐标(火星坐标,GCJ02)、和WGS84坐标系之间的转换的使用技巧和注意事项,需要的朋友参考一下 在项目中面对不同的坐标体系,在地图上显示多多少少都会有点偏差,下面是使用javascript写的转换方法,具体代码如下所示:

  • 7.1.2 导航之坐标系 1.简介 定位是导航中的重要实现之一,所谓定位,就是参考某个坐标系(比如:以机器人的出发点为原点创建坐标系)在该坐标系中标注机器人。定位原理看似简单,但是这个这个坐标系不是客观存在的,我们也无法以上帝视角确定机器人的位姿,定位实现需要依赖于机器人自身,机器人需要逆向推导参考系原点并计算坐标系相对关系,该过程实现常用方式有两种: 通过里程计定位:时时收集机器人的速度信息计算

  • 完成1.1节和1.2节案例后,想必你已经迫切希望呈现出三维的效果,不过在实现三维效果之前,本节课预先进行三维坐标系的讲解。 在xyz轴上分别设置一个顶点,三个顶点确定一个三角形,然后通过WebGL渲染出来,本节课的目的就是通过这样一个案例让你建立WebGL三维坐标系和投影两个概念。本节课的渲染效果并不是上图所表达的效果,上图只是给你展示下三个顶点如何构成了一个三角形区域。 源码中通过下面代码定义了