00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 inline
00024 sheep::Real PerfectSpecularBRDF::Evaluate(const Context &context,
00025 const sheep::Vector3 &incoming,
00026 const sheep::Vector3 &outgoing) const
00027 {
00028 return 0.0;
00029 }
00030
00031 inline
00032 sheep::Real PerfectSpecularBRDF::EvaluateSpecular(const Context &context,
00033 const sheep::Vector3 &incoming,
00034 sheep::Vector3 *outgoing) const
00035 {
00036 assert(incoming.IsUnitLength());
00037 assert(incoming.m_y > 0.0);
00038 assert(outgoing);
00039
00040 outgoing->m_x = -incoming.m_x;
00041 outgoing->m_y = incoming.m_y;
00042 outgoing->m_z = -incoming.m_z;
00043
00044 assert(outgoing->IsUnitLength());
00045
00046 return 1.0;
00047 }
00048
00049 inline
00050 void PerfectSpecularBRDF::Sample(const Context &context,
00051 const sheep::Vector3 &incoming,
00052 sheep::Vector3 *outgoing,
00053 sheep::Real *prob,
00054 sheep::Real *value) const
00055 {
00056 assert(incoming.IsUnitLength());
00057 assert(incoming.m_y > 0.0);
00058 assert(outgoing);
00059 assert(prob);
00060 assert(value);
00061
00062 outgoing->m_x = -incoming.m_x;
00063 outgoing->m_y = incoming.m_y;
00064 outgoing->m_z = -incoming.m_z;
00065
00066 assert(outgoing->IsUnitLength());
00067
00068 *prob = 1.0;
00069 *value = 1.0;
00070 }
00071
00072 inline
00073 sheep::Real PerfectSpecularBRDF::ComputeScatteringProbability(const sheep::Vector3 &incoming,
00074 const sheep::Vector3 &outgoing) const
00075 {
00076 assert(incoming.IsUnitLength());
00077 assert(incoming.m_y > 0.0);
00078 assert(outgoing.IsUnitLength());
00079 assert(outgoing.m_y > 0.0);
00080
00081 return 0.0;
00082 }
00083
00084 inline
00085 sheep::Real PerfectSpecularBRDF::ComputeReflectance(const Context &context) const {
00086
00087 assert(!"Not implemented yet.");
00088 return 1.0;
00089 }
00090
00091 inline
00092 sheep::Real PerfectSpecularBRDF::ComputeReflectance(const Context &context,
00093 const sheep::Vector3 &incoming) const
00094 {
00095 assert(incoming.IsUnitLength());
00096 assert(incoming.m_y > 0.0);
00097
00098
00099 assert(!"Not implemented yet.");
00100 return 1.0;
00101 }