当前位置:   article > 正文

Unity渐变色实现_unity实现应力云图

unity实现应力云图

项目场景:

在Unity中实现给物体赋予渐变色。


问题描述:

在Unity中要实现给物体赋予渐变色,实现类似于应力云图分布的效果。

for (int j = 0; j < Num; j++)
{
    float Scale_y = _Heighter[j];

    GapInfos[j] = new GapInfo(i, 0, j, _Sphere);
    GapInfos[j]._Sphere.transform.localPosition = new Vector3(0, 0.5f, i * 0.01f);
    GapInfos[j]._Sphere.transform.RotateAround(new Vector3(0, 0, i), new Vector3(0, 0, 1), j - 90);

    // 颜色赋值
    Vector3 color = GetRGB((Scale_y - _MinHeight) / (_MaxHeight - _MinHeight)) / 255.0f;
    GapInfos[j]._Sphere.GetComponent<MeshRenderer>().material.color = new Color(color.x, color.y, color.z);
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

如下图实现给每个小球赋予颜色,最终实现云图效果(Red->Blue):
R-B

但是现在想将渐变色的实现实现反转,即Blue->Red,首先想到在代码中,将Color对应的rgb值分别取反,如下,但是效果与设想不一致:

Vector3 color = GetRGB((Scale_y - _MinHeight) / (_MaxHeight - _MinHeight)) / 255.0f;
GapInfos[j]._Sphere.GetComponent<MeshRenderer>().material.color = new Color(1 - color.x, 1 - color.y, 1- color.z);
  • 1
  • 2

在这里插入图片描述


原因分析:

这里对于云图颜色的取反与传统图像的取反并非同样的概念,正确做法是对归一化后获取颜色的Value值取反,这样才能实现云图颜色范围的正确“取反”效果。

Vector3 color = GetRGB(1 - (Scale_y - _MinHeight) / (_MaxHeight - _MinHeight)) / 255.0f;
GapInfos[j]._Sphere.GetComponent<MeshRenderer>().material.color = new Color(color.x, color.y, color.z);
  • 1
  • 2

正确效果如下:
在这里插入图片描述


总结:

如题,特此记录。

慕天有脂人消醉,白首偕老皆莫悔 .HDarker

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/107216
推荐阅读
相关标签
  

闽ICP备14008679号