请问一下2.1.2版本3d节点的坐标如何转换UI坐标

场景中有一个立方体(3d摄像机渲染)和一个三角图标(2d摄像机渲染)

想实现三角图标设置到立方体的位置(世界坐标转屏幕坐标),如下图,怎么实现,我试了一下getWorldToCameraPoint,getCameraToWorldPoint不太理解最终如何转换

请知道的大佬指点一下

附上测试工程
PosConvertTest.zip (201.1 KB)

求帮助

一个在原点位置的立方体,用一个只改变了z值的摄像机去渲染,画布大小640*960,使用getWorldToCameraPoint尝试得到3d物体在屏幕坐标系下的坐标(320.25,480),如果按画布的左下角为原点,这个坐标转换几乎正确。



但是当将相机坐标x变为-100(视觉上物体往右移动了),得到转换坐标(419.5,480),但实际上物体投影在屏幕上的移动距离并没有到100我就想问一下,getWorldToCameraPoint这个接口是不是用错了,如果我想达到目的应该怎么样使用?

PosConvertTest 2.zip (765.7 KB)

这是用2.1.3版本测试的例子

大周末也在加班么
头像好精致啊

用Camera的 worldToScreen试试
源码地址 https://github.com/cocos-creator/engine/blob/b4415d3f111db35eb92e588d63bcb560003ea469/cocos2d/renderer/scene/camera.js#L410

getWorldToCameraPoint这个只是转换到摄像机的坐标系下,并不是你要的屏幕坐标。

谢谢,使用这个接口摄像机某些旋转角度下是接近正确的,但是改变了摄像机的旋转,位置就不对了




PosConvertTest.zip (775.0 KB)

你这个旋转是游戏中实时旋转的,位置也有实时更新么。
还是直接编辑器调整了旋转角度重新运行看的效果

好吧我直接下一个2.1.3了

编辑器调整了旋转角度重新运行看的结果

找到原因了,是设计分辨率跟画布尺寸不一致。

1赞

我是新下载的2.1.3的alpha.3,代码以及工程PosConvertTest.zip (758.7 KB)。

onLoad () {
    var frameSize = cc.view.getFrameSize();
    var designResolution = cc.Canvas.instance.designResolution
    var bFitWidth = frameSize.width / frameSize.height < designResolution.width / designResolution.height;
    cc.Canvas.instance.fitWidth = bFitWidth;
    cc.Canvas.instance.fitHeight = !bFitWidth;
    console.log("bFitWidth", bFitWidth, frameSize);
}


start () {
    var boxPos = cc.v2(this.box.x,this.box.y);

    var canvasNode = cc.Canvas.instance.node
    var boxInScreenPos = new cc.Vec3();
    this.camera3d._camera.worldToScreen(boxInScreenPos,boxPos,canvasNode.width,canvasNode.height);

    this.arrowNode.position = cc.v2(boxInScreenPos.x,boxInScreenPos.y);
}
2赞

亲测 旋转也是没问题的哟。满意的话就快告诉我头像出自哪里吧:blush:

推荐一个好东东 https://learnopengl-cn.github.io/intro/

感谢,这样确实没问题了。头像我也是网上随便找的:joy:

你好,我下载了你们的demo,怎么感觉就x轴差不多能对的上呢

对准的是方块的中心点

把 案例 update 里面的 第一句改为:
var boxPos = this.box.parent.convertToWorldSpaceAR(this.box.position);
使用世界坐标就可以了