void RenderCommand::init(float globalZOrder, const cocos2d::Mat4 &transform, uint32_t flags)
{
_globalOrder = globalZOrder;
if (flags & Node::FLAGS_RENDER_AS_3D)
{
if (Camera::getVisitingCamera())
// bugfix transform 这个矩阵是转入View空间的矩阵 直接取矩阵的 14 z坐标 就是 到摄像机的距离
//_depth = Camera::getVisitingCamera()->getDepthInView(transform);
_depth = -transform.m[14];
set3D(true);
}
else
{
set3D(false);
_depth = 0;
}
}
transform 这个矩阵是Local空间转View空间的矩阵 所以直接取矩阵的下标14 就是 View空间的 z坐标 作为深度使用就对了
_depth = Camera::getVisitingCamera()->getDepthInView(transform);这段代码的原意应该是 希望transform矩阵是Local空间转World空间的矩阵 但是外面的代码 Sprite3D::visit 这个函数里面转入的是 Local转View的矩阵 所以这个矩阵在经过getDepthInView函数取得值没有几何意义
希望对做3D的朋友有帮助