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


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

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


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

示例1: renderDepth

void renderDepth(const WorldModel& wm, const ProjectionMatrix& P, const geo::Pose3D& sensor_pose, Result& res)
{
    // Parameters
    double near_clip_z = -0.1;

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

    const std::vector<Triangle>& triangles = wm.triangles();
    const std::vector<geo::Vec3>& vertices = wm.vertices();

    // transform points
    std::vector<geo::Vec3> vertices_t(vertices.size());
    std::vector<geo::Vec2i> vertices_proj(vertices.size());

    geo::Pose3D sensor_pose_inv = sensor_pose.inverse();

    for(unsigned int i = 0; i < vertices.size(); ++i)
    {
        vertices_t[i] = sensor_pose_inv * vertices[i];
        vertices_proj[i] = P.project3Dto2D(vertices_t[i]);
    }

    for(const auto& t : triangles)
    {
        const geo::Vec3& p1_3d = vertices_t[t.i1];
        const geo::Vec3& p2_3d = vertices_t[t.i2];
        const geo::Vec3& p3_3d = vertices_t[t.i3];

        res.triangleHook(t, p1_3d, p2_3d, p3_3d);

        int n_verts_in = 0;
        bool v1_in = false;
        bool v2_in = false;
        bool v3_in = false;
        const geo::Vec3* vIn[3];

        if (p1_3d.z < near_clip_z) {
            ++n_verts_in;
            v1_in = true;
        }

        if (p2_3d.z < near_clip_z) {
            ++n_verts_in;
            v2_in = true;
        }

        if (p3_3d.z < near_clip_z) {
            ++n_verts_in;
            v3_in = true;
        }

        if (n_verts_in == 1)
        {
            if (v1_in) { vIn[0] = &(p1_3d); vIn[1] = &(p2_3d); vIn[2] = &(p3_3d); }
            if (v2_in) { vIn[0] = &(p2_3d); vIn[1] = &(p3_3d); vIn[2] = &(p1_3d); }
            if (v3_in) { vIn[0] = &(p3_3d); vIn[1] = &(p1_3d); vIn[2] = &(p2_3d); }

            //Parametric line stuff
            // p = v0 + v01*t
            geo::Vec3 v01 = *vIn[1] - *vIn[0];

            float t1 = ((near_clip_z - (*vIn[0]).z) / v01.z );

            geo::Vec3 new2(vIn[0]->x + v01.x * t1, vIn[0]->y + v01.y * t1, near_clip_z);

            // Second vert point
            geo::Vec3 v02 = *vIn[2] - *vIn[0];

            float t2 = ((near_clip_z - (*vIn[0]).z) / v02.z);

            geo::Vec3 new3(vIn[0]->x + v02.x * t2, vIn[0]->y + v02.y * t2, near_clip_z);

            drawTriangle(*vIn[0], new2, new3, P, res);
        }
        else if (n_verts_in == 2)
        {
            if (!v1_in) { vIn[0]=&(p2_3d); vIn[1]=&(p3_3d); vIn[2]=&(p1_3d); }
            if (!v2_in) { vIn[0]=&(p3_3d); vIn[1]=&(p1_3d); vIn[2]=&(p2_3d); }
            if (!v3_in) { vIn[0]=&(p1_3d); vIn[1]=&(p2_3d); vIn[2]=&(p3_3d); }

            //Parametric line stuff
            // p = v0 + v01*t
            geo::Vec3 v01 = *vIn[2] - *vIn[0];

            float t1 = ((near_clip_z - (*vIn[0]).z)/v01.z );

            geo::Vec3 new2((*vIn[0]).x + v01.x * t1,(*vIn[0]).y + v01.y * t1, near_clip_z);

            // Second point
            geo::Vec3 v02 = *vIn[2] - *vIn[1];

            float t2 = ((near_clip_z - (*vIn[1]).z)/v02.z);

            geo::Vec3 new3((*vIn[1]).x + v02.x * t2, (*vIn[1]).y + v02.y * t2, near_clip_z);

            drawTriangle(*vIn[0], *vIn[1], new2, P, res);

            drawTriangle(new2, *vIn[1], new3, P, res);

        }
//.........这里部分代码省略.........
开发者ID:svddries,项目名称:mwm,代码行数:101,代码来源:rendering.cpp


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