MCPcopy Create free account
hub / github.com/FlaxEngine/FlaxEngine / SampleCurve

Method SampleCurve

Source/Engine/Visject/ShaderGraphUtilities.cpp:258–410  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

256
257template<typename T>
258void ShaderGraphUtilities::SampleCurve(TextWriterUnicode& writer, const BezierCurve<T>& curve, const String& time, const String& value)
259{
260 const auto& keyframes = curve.GetKeyframes();
261
262 if (keyframes.Count() == 0)
263 {
264 writer.Write(
265 TEXT(
266 " {{\n"
267 " // Curve ({1})\n"
268 " {0} = 0;\n"
269 " }}\n"
270 ),
271 value, // {0}
272 GetTypename<T>() // {1}
273 );
274 }
275 else if (keyframes.Count() == 1)
276 {
277 writer.Write(
278 TEXT(
279 " {{\n"
280 " // Curve ({1})\n"
281 " {0} = {2};\n"
282 " }}\n"
283 ),
284 value, // {0}
285 GetTypename<T>(), // {1}
286 ShaderGraphValue(keyframes[0].Value).Value // {2}
287 );
288 }
289 else if (keyframes.Count() == 2)
290 {
291 writer.Write(
292 TEXT(
293 " {{\n"
294 " // Curve ({4})\n"
295 " const float leftTime = {3};\n"
296 " const float rightTime = {5};\n"
297 " const float lengthTime = rightTime - leftTime;\n"
298 " float time = clamp({0}, leftTime, rightTime);\n"
299 " float alpha = lengthTime < 0.0000001 ? 0.0f : (time - leftTime) / lengthTime;\n"
300
301 " const {4} leftValue = {6};\n"
302 " const {4} rightValue = {7};\n"
303 " const float oneThird = 1.0f / 3.0f;\n"
304 " {4} leftTangent = leftValue + {8} * (lengthTime * oneThird);\n"
305 " {4} rightTangent = rightValue + {1} * (lengthTime * oneThird);\n"
306
307 " {4} p01 = lerp(leftValue, leftTangent, alpha);\n"
308 " {4} p12 = lerp(leftTangent, rightTangent, alpha);\n"
309 " {4} p23 = lerp(rightTangent, rightValue, alpha);\n"
310 " {4} p012 = lerp(p01, p12, alpha);\n"
311 " {4} p123 = lerp(p12, p23, alpha);\n"
312 " {2} = lerp(p012, p123, alpha);\n"
313 " }}\n"
314 ),
315 time, // {0}

Callers

nothing calls this directly

Calls 7

ShaderGraphValueClass · 0.85
ToStringFunction · 0.50
GetKeyframesMethod · 0.45
CountMethod · 0.45
WriteMethod · 0.45
AppendMethod · 0.45
GetLengthMethod · 0.45

Tested by

no test coverage detected