MCPcopy Create free account
hub / github.com/TheRealMJP/DeferredTexturing / FromRGB

Method FromRGB

SampleFramework12/v1.00/Graphics/Spectrum.cpp:113–186  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

111}
112
113SampledSpectrum SampledSpectrum::FromRGB(const float rgb[3],
114 SpectrumType type) {
115 SampledSpectrum r;
116 if (type == SpectrumType::Reflectance) {
117 // Convert reflectance spectrum to RGB
118 if (rgb[0] <= rgb[1] && rgb[0] <= rgb[2]) {
119 // Compute reflectance _SampledSpectrum_ with _rgb[0]_ as minimum
120 r += rgb[0] * rgbRefl2SpectWhite;
121 if (rgb[1] <= rgb[2]) {
122 r += (rgb[1] - rgb[0]) * rgbRefl2SpectCyan;
123 r += (rgb[2] - rgb[1]) * rgbRefl2SpectBlue;
124 } else {
125 r += (rgb[2] - rgb[0]) * rgbRefl2SpectCyan;
126 r += (rgb[1] - rgb[2]) * rgbRefl2SpectGreen;
127 }
128 } else if (rgb[1] <= rgb[0] && rgb[1] <= rgb[2]) {
129 // Compute reflectance _SampledSpectrum_ with _rgb[1]_ as minimum
130 r += rgb[1] * rgbRefl2SpectWhite;
131 if (rgb[0] <= rgb[2]) {
132 r += (rgb[0] - rgb[1]) * rgbRefl2SpectMagenta;
133 r += (rgb[2] - rgb[0]) * rgbRefl2SpectBlue;
134 } else {
135 r += (rgb[2] - rgb[1]) * rgbRefl2SpectMagenta;
136 r += (rgb[0] - rgb[2]) * rgbRefl2SpectRed;
137 }
138 } else {
139 // Compute reflectance _SampledSpectrum_ with _rgb[2]_ as minimum
140 r += rgb[2] * rgbRefl2SpectWhite;
141 if (rgb[0] <= rgb[1]) {
142 r += (rgb[0] - rgb[2]) * rgbRefl2SpectYellow;
143 r += (rgb[1] - rgb[0]) * rgbRefl2SpectGreen;
144 } else {
145 r += (rgb[1] - rgb[2]) * rgbRefl2SpectYellow;
146 r += (rgb[0] - rgb[1]) * rgbRefl2SpectRed;
147 }
148 }
149 r *= .94f;
150 } else {
151 // Convert illuminant spectrum to RGB
152 if (rgb[0] <= rgb[1] && rgb[0] <= rgb[2]) {
153 // Compute illuminant _SampledSpectrum_ with _rgb[0]_ as minimum
154 r += rgb[0] * rgbIllum2SpectWhite;
155 if (rgb[1] <= rgb[2]) {
156 r += (rgb[1] - rgb[0]) * rgbIllum2SpectCyan;
157 r += (rgb[2] - rgb[1]) * rgbIllum2SpectBlue;
158 } else {
159 r += (rgb[2] - rgb[0]) * rgbIllum2SpectCyan;
160 r += (rgb[1] - rgb[2]) * rgbIllum2SpectGreen;
161 }
162 } else if (rgb[1] <= rgb[0] && rgb[1] <= rgb[2]) {
163 // Compute illuminant _SampledSpectrum_ with _rgb[1]_ as minimum
164 r += rgb[1] * rgbIllum2SpectWhite;
165 if (rgb[0] <= rgb[2]) {
166 r += (rgb[0] - rgb[1]) * rgbIllum2SpectMagenta;
167 r += (rgb[2] - rgb[0]) * rgbIllum2SpectBlue;
168 } else {
169 r += (rgb[2] - rgb[1]) * rgbIllum2SpectMagenta;
170 r += (rgb[0] - rgb[2]) * rgbIllum2SpectRed;

Callers

nothing calls this directly

Calls 1

ClampMethod · 0.45

Tested by

no test coverage detected