MCPcopy Create free account
hub / github.com/RenderKit/embree / derivBSpline

Function derivBSpline

tutorials/pathtracer/pathtracer_device.cpp:1068–1106  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1066}
1067
1068inline Vec3fa derivBSpline(const ISPCHairSet* mesh, const unsigned int primID, const float t, const float time)
1069{
1070 Vec3fa p00, p01, p02, p03;
1071 const int i = mesh->hairs[primID].vertex;
1072
1073 if (mesh->numTimeSteps == 1)
1074 {
1075 p00 = mesh->positions[0][i+0];
1076 p01 = mesh->positions[0][i+1];
1077 p02 = mesh->positions[0][i+2];
1078 p03 = mesh->positions[0][i+3];
1079 }
1080 else
1081 {
1082 float f = mesh->numTimeSteps*time;
1083 int itime = clamp((int)floor(f),0,(int)mesh->numTimeSteps-2);
1084 float t1 = f-itime;
1085 float t0 = 1.0f-t1;
1086 const Vec3fa a0 = mesh->positions[itime+0][i+0];
1087 const Vec3fa a1 = mesh->positions[itime+0][i+1];
1088 const Vec3fa a2 = mesh->positions[itime+0][i+2];
1089 const Vec3fa a3 = mesh->positions[itime+0][i+3];
1090 const Vec3fa b0 = mesh->positions[itime+1][i+0];
1091 const Vec3fa b1 = mesh->positions[itime+1][i+1];
1092 const Vec3fa b2 = mesh->positions[itime+1][i+2];
1093 const Vec3fa b3 = mesh->positions[itime+1][i+3];
1094 p00 = t0*a0 + t1*b0;
1095 p01 = t0*a1 + t1*b1;
1096 p02 = t0*a2 + t1*b2;
1097 p03 = t0*a3 + t1*b3;
1098 }
1099
1100 const float t0 = 1.0f - t, t1 = t;
1101 const float n0 = -0.5f*t1*t1;
1102 const float n1 = -0.5f*t0*t0 - 2.0f*(t0*t1);
1103 const float n2 = 0.5f*t1*t1 + 2.0f*(t1*t0);
1104 const float n3 = 0.5f*t0*t0;
1105 return Vec3fa(n0*p00 + n1*p01 + n2*p02 + n3*p03);
1106}
1107
1108void postIntersectGeometry(const TutorialData& data, const Ray& ray, DifferentialGeometry& dg, ISPCGeometry* geometry, int& materialID)
1109{

Callers 1

postIntersectGeometryFunction · 0.85

Calls 3

clampFunction · 0.50
floorFunction · 0.50
Vec3faClass · 0.50

Tested by

no test coverage detected