unsigned int convertHairSet(ISPCHairSet* hair, RTCScene scene_out) { /* if more than a single timestep, mark object as dynamic */ RTCGeometryFlags object_flags = hair->numTimeSteps > 1 ? RTC_GEOMETRY_DYNAMIC : RTC_GEOMETRY_STATIC; /* create object */ unsigned int geomID = 0; switch (hair->basis) { case BEZIER_BASIS : geomID = rtcNewBezierHairGeometry (scene_out, object_flags, hair->numHairs, hair->numVertices, hair->numTimeSteps); break; case BSPLINE_BASIS: geomID = rtcNewBSplineHairGeometry (scene_out, object_flags, hair->numHairs, hair->numVertices, hair->numTimeSteps); break; default: assert(false); } /* generate vertex buffer */ Vec3fa* vertices = (Vec3fa*) rtcMapBuffer(scene_out,geomID,RTC_VERTEX_BUFFER); for (size_t i=0;i<hair->numVertices;i++) vertices[i] = hair->positions[0][i]; rtcUnmapBuffer(scene_out, geomID, RTC_VERTEX_BUFFER); /* set index buffer */ rtcSetBuffer(scene_out,geomID,RTC_INDEX_BUFFER,hair->hairs,0,sizeof(ISPCHair)); rtcSetTessellationRate(scene_out,geomID,(float)hair->tessellation_rate); return geomID; }
extern "C" void ispcSetTessellationRate (RTCScene hscene, unsigned geomID, float tessellationRate) { rtcSetTessellationRate(hscene,geomID,tessellationRate); }