コード例 #1
0
    private void ProbeColorMap()
    {
        laserLine.enabled = false;
        probeText.transform.parent.gameObject.transform.rotation = Quaternion.LookRotation(imageTarget.transform.position - Camera.main.transform.position);
        if (!CheckColorMap())
        {
            probeText.text     = invalidColorMapProbe;
            toolTitleText.text = invalidColorMapTitle;
            return;
        }
        colorMap            = globe.CurrentLayer.Colormap;
        toolTitleText.text  = colorMap.title + " Color Map";
        toolSlider.maxValue = colorMap.max;
        toolSlider.minValue = colorMap.min;

        RaycastHit hit;

        if (!Physics.Raycast(imageTarget.transform.position + imageTarget.transform.up * 0.1f, -imageTarget.transform.up, out hit) || !markerTrackable.tracked)
        {
            return;
        }
        Renderer     rend         = hit.transform.GetComponent <Renderer>();
        MeshCollider meshCollider = hit.collider as MeshCollider;
        Texture2D    tex          = rend.material.GetTexture("_NewTex") as Texture2D;

        laserLine.enabled = true;
        laserLine.SetPosition(0, transform.position + transform.up * 0.01f);
        laserLine.SetPosition(1, hit.point);

        if (tex == null)
        {
            return;
        }

        Vector2 pixelUV = hit.textureCoord;

        pixelUV.x *= tex.width * hit.collider.gameObject.GetComponent <Renderer>().material.GetTextureScale("_NewTex").x;
        pixelUV.y *= tex.height * hit.collider.gameObject.GetComponent <Renderer>().material.GetTextureScale("_NewTex").y;
        pixelUV.x += tex.width * hit.collider.gameObject.GetComponent <Renderer>().material.GetTextureOffset("_NewTex").x;
        pixelUV.y += tex.height * hit.collider.gameObject.GetComponent <Renderer>().material.GetTextureOffset("_NewTex").y;


        Color     colorSelect = tex.GetPixel((int)pixelUV.x, (int)pixelUV.y);
        Vector3   color       = new Vector3(colorSelect.r, colorSelect.g, colorSelect.b) * 255;
        DataRange colorRange  = colorMap.GetRange(color);

        laserLine.material.color = colorSelect;
        SetProbeColor(new Color(colorSelect.r, colorSelect.g, colorSelect.b));
        toolSlider.value = (colorRange.max + colorRange.min) / 2;
        probeText.text   = Mathf.Round(colorRange.min).ToString() + " - " + Mathf.Round(colorRange.max).ToString() + " " + colorMap.units;
    }