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


C++ Vector4::GetVector3方法代码示例

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


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

示例1: ModelViewTransform

// rend_primitive 相机空间
void Renderer::ModelViewTransform(const Matrix44 &model_view)
{
    Matrix33 normal_trans = model_view.GetMatrix33();
    normal_trans.SetInverse();
    normal_trans.SetTranspose();

    // 转换灯光位置
    if (light_)
    {
        Vector4 pl;
        pl.SetVector3(light_->position);
        pl.w = 1.0f;
        pl = pl * model_view;
        light_pos_ = pl.GetVector3();
    }

#if 0
    for (int i = 0; i < rend_primitive_.size; ++i)
    {
        if (((i + 1) % 3) == 0)
        {
            Vector3 p0 = rend_primitive_.vertexs[i - 2].position.GetVector3();
            Vector3 p1 = rend_primitive_.vertexs[i - 1].position.GetVector3();
            Vector3 p2 = rend_primitive_.vertexs[i].position.GetVector3();

            Vector3 e0 = p0 - p1;
            Vector3 e1 = p1 - p2;

            Vector3 n = rend_primitive_.vertexs[i-1].normal;
            float dot = DotProduct(e0, n);
//            Logger::GtLogInfo("before:0\t%f", dot);
            assert(equalf(dot, 0, 0.001));
            dot = DotProduct(e1, n);
//            Logger::GtLogInfo("before:1\t%f", dot);
            assert(equalf(dot, 0, 0.001));
        }
    }
#endif

    for (int i = 0; i < rend_primitive_.size; ++i)
    {
        Vector4 &position = rend_primitive_.vertexs[i].position;
        position = position * model_view;
        Vector3 &normal = rend_primitive_.vertexs[i].normal;
        normal = normal * normal_trans;
        normal.SetNormalize();
    }

#if 0
    for (int i = 0; i < rend_primitive_.size; ++i)
    {
        if (((i + 1) % 3) == 0)
        {
            Vector4 p0 = rend_primitive_.vertexs[i - 2].position;
            Vector4 p1 = rend_primitive_.vertexs[i - 1].position;
            Vector4 p2 = rend_primitive_.vertexs[i].position;

            Vector3 e0 = (p0 - p1).GetVector3();
            Vector3 e1 = (p1 - p2).GetVector3();

            Vector3 N = CrossProduct(e0, e1);
            N.SetNormalize();

            float dot = DotProduct(N, e0);
            Logger::GtLogInfo("dot e0 \t%f", dot);
            dot = DotProduct(N, e1);
            Logger::GtLogInfo("dot e1 \t%f", dot);

            Vector3 n0 = rend_primitive_.vertexs[i - 2].normal;
            Vector3 n1 = rend_primitive_.vertexs[i - 1].normal;
            Vector3 n2 = rend_primitive_.vertexs[i].normal;
            Vector3 zero = CrossProduct(N, n1);
            zero.Display();

            dot = DotProduct(e0, n0);
            Logger::GtLogInfo("after:0\t%f", dot);
            dot = DotProduct(e1, n0);
            Logger::GtLogInfo("after:1\t%f", dot);
        }
    }
#endif
}
开发者ID:unoyx,项目名称:soft-renderer,代码行数:83,代码来源:Renderer.cpp


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