当前位置: 首页>>代码示例>>C++>>正文


C++ WorldModel::point_colors方法代码示例

本文整理汇总了C++中WorldModel::point_colors方法的典型用法代码示例。如果您正苦于以下问题:C++ WorldModel::point_colors方法的具体用法?C++ WorldModel::point_colors怎么用?C++ WorldModel::point_colors使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在WorldModel的用法示例。


在下文中一共展示了WorldModel::point_colors方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。

示例1: render

void Viewer::render(const WorldModel& wm)
{
    // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    if (!cam_initialized_)
    {
        if (!wm.points().empty() || !wm.vertices().empty())
        {
            geo::Vec3 p_total(0, 0, 0);
            for(unsigned int i = 0; i < wm.points().size(); ++i)
                p_total += wm.points()[i];

            for(unsigned int i = 0; i < wm.vertices().size(); ++i)
                p_total += wm.vertices()[i];

            cam_control_.cam_lookat = p_total / (wm.points().size() + wm.vertices().size());
            cam_initialized_ = true;
        }
        else
        {
            cam_control_.cam_lookat = geo::Vec3(0, 0, 0);
        }

        cam_control_.cam_dist = 5;
        cam_control_.cam_pitch = 0.7;
        cam_control_.cam_yaw = 3.1415;
    }

    // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    // Calculate camera pose

    cam_control_.cam_pose.t = geo::Vector3(cos(cam_control_.cam_yaw), sin(cam_control_.cam_yaw), 0)
                                * cos(cam_control_.cam_pitch) * cam_control_.cam_dist;
    cam_control_.cam_pose.t.z = sin(cam_control_.cam_pitch) * cam_control_.cam_dist;
    cam_control_.cam_pose.t += cam_control_.cam_lookat;

    geo::Vec3 rz = -(cam_control_.cam_lookat - cam_control_.cam_pose.t).normalized();
    geo::Vec3 rx = geo::Vector3(0, 0, 1).cross(rz).normalized();
    geo::Vec3 ry = rz.cross(rx).normalized();

    cam_control_.cam_pose.R = geo::Mat3(rx.x, ry.x, rz.x,
                                        rx.y, ry.y, rz.y,
                                        rx.z, ry.z, rz.z);

    // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    canvas_.setTo(cv::Vec3b(20, 20, 20));
    cv::Mat depth_image(canvas_.rows, canvas_.cols, CV_32FC1, 0.0);

    LightingRenderer res(depth_image, canvas_, cam_control_.cam_pose);
    mwm::render::renderDepth(wm, P_, cam_control_.cam_pose, res);

    // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    geo::Pose3D sensor_pose_inv = cam_control_.cam_pose.inverse();

    for(unsigned int i = 0; i < wm.points().size(); ++i)
    {
        const geo::Vec3& p = wm.points()[i];
        const cv::Vec3b& color = wm.point_colors()[i];

        geo::Vec3 p_sensor = sensor_pose_inv * p;
        geo::Vec2i p_2d = P_.project3Dto2D(p_sensor);
        double z = -p_sensor.z;

//        if (z < 0)
//            continue;

        if (p_2d.x < 0 || p_2d.y < 0 || p_2d.x >= canvas_.cols || p_2d.y >= canvas_.rows)
            continue;

        float& d = depth_image.at<float>(p_2d.y, p_2d.x);
        if (d == 0 || z < d)
        {
            d = z;
            canvas_.at<cv::Vec3b>(p_2d.y, p_2d.x) = color;
//            cv::circle(canvas_, cv::Point(p_2d.x, p_2d.y), 3, cv::Scalar(color[0], color[1], color[2]), CV_FILLED);
        }
    }

//    unsigned int size = canvas_.rows * canvas_.cols;
//    for(unsigned int i = 0; i < size; ++i)
//    {
//        float d = depth_image.at<float>(i);
//        if (d == 0)
//            canvas_.at<cv::Vec3b>(i) = cv::Vec3b(20, 20, 20);
//        else
//            canvas_.at<cv::Vec3b>(i) = (d / 10) * cv::Vec3b(255, 255, 255);
//    }
}
开发者ID:svddries,项目名称:mwm,代码行数:90,代码来源:viewer.cpp


注:本文中的WorldModel::point_colors方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。