【问题标题】:Scaling right vector based on light direction根据光线方向缩放右向量
【发布时间】:2014-06-01 07:40:26
【问题描述】:

我有一个我构建的四边形,我想根据光线的多少来缩放四边形,问题是点积给了我负值,我不能用它来缩放另一边的向量四边形的。我有一个由 6 个顶点、两个四边形组成的网格。两个四边形中的一个应根据点积值扩展或缩小,我将如何缩放一个四边形并根据该点积值缩小另一边?

 float lightAngleRightVector = Vector3.Dot(lightDir.normalized, Source.transform.right.normalized);

        lightAngleRightVector = Mathf.Clamp(lightAngleRightVector, 0.2f, 0.5f);
        Global.Log("Light Angle Right Vecotr" + lightAngleRightVector);
        // light projected left side, limit values);
        if (lightAngleRightVector < 0.3f)
        {
            vxAbLeft = lightAngleRightVector;
            vxCdRight = lightAngleRightVector - 0.1f;
        }

        // light projected right side
        else if (lightAngleRightVector > 0.3f)
        {

            vxCdRight = lightAngleRightVector;
            vxAbLeft = lightAngleRightVector - 0.1f;
        }



        Global.Log("VxCDRIGHT =   " + vxCdRight);
        Global.Log("vxAbLeft =   " + vxAbLeft);

        // add little bit shift up for fixing z-fighting
        Vector3 vxPos1Top = (frontPt + new Vector3(0, mShadowOffestY, 0)) - (mRightFrontPt * vxAbLeft) * scale; // 1,2 vertices or on its left

        Vector3 vxPos2Top = (mRightBackPt * vxAbLeft) * scale;

        Vector3 vxPos3Top = frontPt;

        Vector3 vxPos4Top = backPt;

        Vector3 vxPos5Top =(mRightFrontPt * vxCdRight) * scale; // 5,6 vertices are on the right of the car

        Vector3 vxPos6Top =(mRightBackPt * vxCdRight * scale);

【问题讨论】:

  • 如果它是负数,在谈论光时不应该只是 0。负点积意味着一个向量在另一个向量上的线性投影方向相反。看看graphical representation

标签: c# math vector 3d unity3d


【解决方案1】:

也许比例尺应该是 abs(scale),所以从不亮的一侧算起 > 0。这就是你想要的吗?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-03-23
    • 2014-07-29
    • 1970-01-01
    • 2022-09-23
    • 1970-01-01
    • 1970-01-01
    • 2014-08-19
    • 2020-03-14
    相关资源
    最近更新 更多