protected override Tuple LocalNormalAt(Tuple localPoint, Intersection hit) { float dist = localPoint.X * localPoint.X + localPoint.Z * localPoint.Z; if (dist < 1) { if (localPoint.Y >= Maximum - Constants.floatEps) { return(Tuple.Vector(0, 1, 0)); } else if (localPoint.Y <= Minimum + Constants.floatEps) { return(Tuple.Vector(0, -1, 0)); } } return(Tuple.Vector(localPoint.X, 0, localPoint.Z)); }
private void ReadNormal(char[] contents) { var normal = Tuple.Vector(0, 0, 0); for (int i = 0; i < 3; ++i) { Token token = GetNextToken(contents); if (token.Type == TokenType.Number) { normal[i] = float.Parse(token.Value); } else { throw new FormatException($"{token.Value} is not a Number"); } } Normals.Add(normal); }
protected override Tuple LocalNormalAt(Tuple localPoint, Intersection hit) { float absX = Abs(localPoint.X); float absY = Abs(localPoint.Y); float absZ = Abs(localPoint.Z); float maxc = Max(Max(absX, absY), absZ); if (Abs(absX - maxc) < Constants.floatEps) { return(Tuple.Vector(localPoint.X, 0, 0)); } else if (Abs(absY - maxc) < Constants.floatEps) { return(Tuple.Vector(0, localPoint.Y, 0)); } return(Tuple.Vector(0, 0, localPoint.Z)); }
private static Tuple ReadVector(JToken jToken) { return(Tuple.Vector((float)jToken[0], (float)jToken[1], (float)jToken[2])); }
protected override Tuple LocalNormalAt(Tuple p, Intersection hit) { return(Tuple.Vector(0, 1, 0)); }