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); }