예제 #1
0
    public float GetRelevanceWeight(Planet.PointOfInterest data)
    {
        var weight = GetSizeOnScreen(data);

        lastGenerationWeight = weight;
        return(weight);
    }
예제 #2
0
    private float GetSizeOnScreen(Planet.PointOfInterest data)
    {
        var myPos            = rangePosToCalculateScreenSizeOn_localToPlanet.CenterPos + planet.BigPosition;
        var distanceToCamera = BigPosition.Distance(myPos, data.pos);

        // TODO: this is world space, doesnt take into consideration rotation, not good,
        // but we dont care about rotation, we want to have correct detail even if we are looking at chunk from side?
        var sphere           = rangePosToCalculateScreenSizeOn_localToPlanet.ToBoundingSphere();
        var radiusWorldSpace = sphere.radius;
        var fov = data.fieldOfView;
        var cot = 1.0 / Mathf.Tan(fov / 2f * Mathf.Deg2Rad);
        var radiusCameraSpace = radiusWorldSpace * cot / distanceToCamera;

        lastDistanceToCamera = distanceToCamera;
        lastRadiusWorldSpace = radiusWorldSpace;

        return((float)radiusCameraSpace);
    }