internal static Color calculateShadowColor(SceneManager sManager, vec4 intersectionPoint, MaterialProperty material)
        {
            vec3 _currentColor = material.AmbientColour;

            _currentColor = _currentColor * Light.LightAmbient;
            return(createColour(_currentColor));
        }
        private static bool hasObjectIntersection(Dictionary <int, ObjectType> objectList, List <AABB> aabbGrpups, Ray ray, out vec4 intersecPoint, out vec4 normal, out MaterialProperty materialProperty, out KeyValuePair <int, ObjectType> kvp)
        {
            float closestT = Constants.Max_camera_distance;

            intersecPoint    = new vec4();
            normal           = new vec4();
            materialProperty = new MaterialProperty();
            kvp = new KeyValuePair <int, ObjectType>();
            bool hasFound = false;

            //Erst AABB gruppen durchsuchen
            foreach (var aabb in aabbGrpups)
            {
                if (!aabb.hitAABB(ray))
                {
                    continue;
                }
                foreach (var _obj in aabb.ElementList)
                {
                    vec4             _current_intersec = new vec4();
                    vec4             _current_normal   = new vec4();
                    MaterialProperty _props            = new MaterialProperty();
                    float            t;

                    if (_obj.hasIntersectionPoint(ray, out _current_intersec, out _current_normal, out t, out _props))
                    {
                        if (t > 0 && t < closestT)
                        {
                            intersecPoint    = _current_intersec;
                            normal           = _current_normal;
                            closestT         = t;
                            materialProperty = _props;
                            kvp      = new KeyValuePair <int, ObjectType>(_obj.IdNumber, _obj);
                            hasFound = true;
                        }
                    }
                }
            }
            //Dann restliche Objekte

            foreach (var _kvp in objectList)
            {
                if (_kvp.Value.PartOfGroup)
                {
                    continue;
                }
                vec4             _current_intersec = new vec4();
                vec4             _current_normal   = new vec4();
                MaterialProperty _props            = new MaterialProperty();
                ObjectType       obj = _kvp.Value;
                float            t;

                if (obj.hasIntersectionPoint(ray, out _current_intersec, out _current_normal, out t, out _props))
                {
                    if (t > 0 && t < closestT)
                    {
                        intersecPoint    = _current_intersec;
                        normal           = _current_normal;
                        closestT         = t;
                        materialProperty = _props;
                        kvp      = _kvp;
                        hasFound = true;
                    }
                }
            }
            return(hasFound);
        }