【问题标题】:Changing (gradient) color of Game Object due to distance in an AR Application由于 AR 应用程序中的距离而改变(渐变)游戏对象的颜色
【发布时间】:2019-08-27 09:56:51
【问题描述】:

我正在尝试制作一个显示 POI 周围的 AR 应用程序。这些 POI 来自不同的距离,由于距离我想用渐变比例将它们做成不同的颜色。

我已经使用 Haversine 公式计算了 POI 与 GPS 坐标的距离,并尝试根据距离更改颜色,但即使在我看到 POI 时通过步行改变距离,它也不会更新颜色。我将 WorldScaleAr 场景用于 AR。以下代码仅适用于一个 POI。

using System;
using static System.Math;

double[,] coords = new double[,] { { 39.870613, 32.73341 } }; // POI location

void Start()
{
    // get poi Location
    lat1 = Math.PI * coords[0, 0] / 180.0;
    // lat2 = Math.PI * user[0, 0] / 180.0;
    lon1 = Math.PI * coords[0, 1] / 180.0;
    // lon2 = Math.PI * user[0, 1] / 180.0;

}

void Update()
{
    // Get user location
    // Latitude
    x = getLocation.x1.ToString();
    user_lat = Convert.ToDouble(x);
    user_lat_rad = Math.PI * user_lat / 180.0; // Radian
    // Longitude
    y = getLocation.y1.ToString();
    user_lon = Convert.ToDouble(y);
    user_lon_rad = Math.PI * user_lon / 180.0; // Radian

    // Change POIs sizes
    distances = Convert.ToSingle(distance(user_lat_rad, user_lon_rad));
    GetComponent<Renderer>().material.color = new Color((distances*255f/1000f)/255f, (distances*255f/1000f)/255f, (distances*255f/1000f)/255f);

public double distance(double lat2, double lon2)
{
    // Haversine Formula
    // Lat2,Lon2 = User Location
    // Lat1,Lon1 = POI Location
    double dist1 = Sqrt((Pow(Sin((lat2 - lat1) / 2), 2)) + Cos(lat2) * Cos(lat2) * (Pow(Sin((lon2 - lon1) / 2), 2)));
    double distance = 2 * r * Asin(dist1);
    return distance;
}

【问题讨论】:

    标签: c# unity3d augmented-reality


    【解决方案1】:

    距离函数返回什么值?我问的是数值的数量级。这:distances*255f/1000f)/255f 等于 distance/1000 所以你也可以得到接近零的值,或者如果它超过 1000(不确定这里的单位是什么),一个 >1 的值。

    【讨论】:

    • 感谢您的回答,我查看了距离的大小,它具有很大的价值。我尝试了另一件事来改变颜色。我添加了一个新值float gra = 0; gra = gra + 1f; GetComponent&lt;Renderer&gt;().material.color = new Color((gra/255f), gra/255f, gra/255f); 它的颜色无论如何都不会改变。
    • Update() 中的 =+1 吗?达到全白需要 255 个周期。也许在你的编辑器中公开那个 gra 值,只是为了检查颜色变化是否有效(从它的外观来看,应该有效)。有很多方法可以将值限制在 0 和 1 之间,但我会首先调试“距离”的值以了解典型值以及您的最小值和最大值。
    • 是的,无论如何,它是一个循环,我期待 POI 的颜色每次迭代都会改变,但它不会改变,它在第一次运行代码后保持不变。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-02
    • 1970-01-01
    • 2010-12-17
    相关资源
    最近更新 更多