public override Color CombineFullColor(Color highLayerColor, Color lowLayerColor) { var hsv = HSV.FromRGB(lowLayerColor); hsv.V = hsv.V * (1 - HSV.VFromRgb(highLayerColor)); return(highLayerColor.Combine(hsv.ToRGB())); }
public static ColorCombineOp Combine(List <ColorCombineOp> inRequests, Color?inDefault = null) { if (!inDefault.HasValue) { inDefault = new Color(1f, 1f, 1f, 0f); } if (inRequests.Count > 0) { Color color = inDefault.Value; for (int i = 0; i < inRequests.Count; i++) { color = color.Combine(inRequests[i].color, inRequests[i].combineType); } return(new ColorCombineOp(color, ColorCombineType.Replace)); } else { return(new ColorCombineOp(inDefault.Value, ColorCombineType.Replace)); } }
public Color Combine(Color baseColor) { return(baseColor.Combine(color, combineType)); }
public override Color CombineFullColor(Color highLayerColor, Color lowLayerColor) { var hsv = HSV.FromRGB(lowLayerColor); hsv.V = hsv.V * (1 - HSV.VFromRgb(highLayerColor)); return highLayerColor.Combine(hsv.ToRGB()); }
/** * Shade * * @param tree * @param eyeRay * @param color * @param factor * @param level * @param originID */ private void Shade(OctNode tree, Ray eyeRay, Color color, double factor, int level, int originID) { Color lightColor = new Color(0.0f, 0.0f, 0.0f); Color reflectColor = new Color(0.0f, 0.0f, 0.0f); Color refractColor = new Color(0.0f, 0.0f, 0.0f); IntersectPt intersect = new IntersectPt(); OctNode baseoctn = new OctNode(); Vector normal = new Vector(); Ray reflect = new Ray(); Ray refract = new Ray(); double mu; int current; if (intersect.FindNearestIsect(tree, eyeRay, originID, level, baseoctn)) { intersect.GetIntersectObj().FindNormal(intersect.GetIntersection(), normal); GetLightColor(baseoctn, intersect.GetIntersection(), normal, intersect.GetIntersectObj(), lightColor); if (level < MaxLevel) { double check = factor * (1.0f - intersect.GetIntersectObj().GetMaterial().GetKTran()) * intersect.GetIntersectObj().GetMaterial().GetShininess(); if (check > MinFactor) { reflect.SetOrigin(intersect.GetIntersection()); reflect.GetDirection().Combine(eyeRay.GetDirection(), normal, 1.0f, -2.0f * normal.Dot(eyeRay.GetDirection())); reflect.SetID(RayID); this.RayID = this.RayID + 1; Shade(baseoctn, reflect, reflectColor, check, level + 1, originID); reflectColor.Scale((1.0f - intersect.GetIntersectObj().GetMaterial().GetKTran()) * intersect.GetIntersectObj().GetMaterial().GetShininess(), intersect.GetIntersectObj().GetMaterial().GetSpecColor()); } check = factor * intersect.GetIntersectObj().GetMaterial().GetKTran(); if (check > MinFactor) { if (intersect.GetEnter()) { mu = 1.0f / intersect.GetIntersectObj().GetMaterial().GetRefIndex(); current = intersect.GetIntersectObj().GetObjID(); } else { mu = intersect.GetIntersectObj().GetMaterial().GetRefIndex(); normal.Negate(); current = 0; } double IdotN = normal.Dot(eyeRay.GetDirection()); double TotIntReflect = 1.0f - mu * mu * (1.0f - IdotN * IdotN); if (TotIntReflect >= 0.0) { double gamma = -mu * IdotN - (double)Math.Sqrt(TotIntReflect); refract.SetOrigin(intersect.GetIntersection()); refract.GetDirection().Combine(eyeRay.GetDirection(), normal, mu, gamma); refract.SetID(RayID); this.RayID = RayID + 1; Shade(baseoctn, refract, refractColor, check, level + 1, current); refractColor.Scale(intersect.GetIntersectObj().GetMaterial().GetKTran(), intersect.GetIntersectObj().GetMaterial().GetSpecColor()); } } } color.Combine(intersect.GetIntersectObj().GetMaterial().GetEmissColor(), intersect.GetIntersectObj().GetMaterial().GetAmbColor(), AmbLightIntensity, lightColor, reflectColor, refractColor); } }
/** * Shade * * @param tree * @param eyeRay * @param color * @param factor * @param level * @param originID */ private void Shade(OctNode tree, Ray eyeRay, Color color, double factor, int level, int originID) { Color lightColor = new Color(0.0f, 0.0f, 0.0f); Color reflectColor = new Color(0.0f, 0.0f, 0.0f); Color refractColor = new Color(0.0f, 0.0f, 0.0f); IntersectPt intersect = new IntersectPt(); OctNode baseoctn = new OctNode(); Vector normal = new Vector(); Ray reflect = new Ray(); Ray refract = new Ray(); double mu; int current; if(intersect.FindNearestIsect(tree, eyeRay, originID, level, baseoctn)) { intersect.GetIntersectObj().FindNormal(intersect.GetIntersection(), normal); GetLightColor(baseoctn, intersect.GetIntersection(), normal, intersect.GetIntersectObj(), lightColor); if(level < MaxLevel) { double check = factor * (1.0f - intersect.GetIntersectObj().GetMaterial().GetKTran()) * intersect.GetIntersectObj().GetMaterial().GetShininess(); if(check > MinFactor) { reflect.SetOrigin(intersect.GetIntersection()); reflect.GetDirection().Combine(eyeRay.GetDirection(), normal, 1.0f, -2.0f * normal.Dot(eyeRay.GetDirection())); reflect.SetID(RayID); this.RayID = this.RayID + 1; Shade(baseoctn, reflect, reflectColor, check, level + 1, originID); reflectColor.Scale((1.0f - intersect.GetIntersectObj().GetMaterial().GetKTran()) * intersect.GetIntersectObj().GetMaterial().GetShininess(), intersect.GetIntersectObj().GetMaterial().GetSpecColor()); } check = factor * intersect.GetIntersectObj().GetMaterial().GetKTran(); if(check > MinFactor) { if(intersect.GetEnter()) { mu = 1.0f / intersect.GetIntersectObj().GetMaterial().GetRefIndex(); current = intersect.GetIntersectObj().GetObjID(); } else { mu = intersect.GetIntersectObj().GetMaterial().GetRefIndex(); normal.Negate(); current = 0; } double IdotN = normal.Dot(eyeRay.GetDirection()); double TotIntReflect = 1.0f - mu * mu * (1.0f - IdotN * IdotN); if(TotIntReflect >= 0.0) { double gamma = -mu * IdotN - (double)Math.Sqrt(TotIntReflect); refract.SetOrigin(intersect.GetIntersection()); refract.GetDirection().Combine(eyeRay.GetDirection(), normal, mu, gamma); refract.SetID(RayID); this.RayID = RayID + 1; Shade(baseoctn, refract, refractColor, check, level + 1, current); refractColor.Scale(intersect.GetIntersectObj().GetMaterial().GetKTran(), intersect.GetIntersectObj().GetMaterial().GetSpecColor()); } } } color.Combine(intersect.GetIntersectObj().GetMaterial().GetEmissColor(), intersect.GetIntersectObj().GetMaterial().GetAmbColor(), AmbLightIntensity, lightColor, reflectColor, refractColor); } }