VtArray<GfVec3d> Hd_VertexAdjacency::ComputeSmoothNormals(int numPoints, GfVec3d const * pointsPtr) const { return _ComputeSmoothNormals( numPoints, pointsPtr, _adjacencyTable, _numPoints); }
void OsdMeshWrapper::UpdatePoints(int level, jfloat *points) { std::vector<float> normals; _ComputeSmoothNormals(_nverts, _verts, _numPoints, _numFloatsPerPoint, points, &normals); std::vector<float> interleaved; for (int i=0; i<_numPoints; ++i) { for (int j=0; j<_numFloatsPerPoint; ++j) { interleaved.push_back(points[i*_numFloatsPerPoint + j]); } interleaved.push_back(normals[i*3 + 0]); interleaved.push_back(normals[i*3 + 1]); interleaved.push_back(normals[i*3 + 2]); } _osdMesh->UpdateVertexBuffer(interleaved.data(), _numPoints); _osdMesh->Refine(); _trianglesIndexBuffer = _osdMesh->GetDrawContext()->patchTrianglesIndexBuffer; _trianglesIndexCount = (_osdMesh->GetDrawContext()->patchArrays[0].numIndices/4)*6; }
/* static */ VtArray<GfVec3d> Hd_SmoothNormals::ComputeSmoothNormals( Hd_VertexAdjacency const * adjacency, int numPoints, GfVec3d const * pointsPtr) { return _ComputeSmoothNormals(numPoints, pointsPtr, adjacency->GetAdjacencyTable(), adjacency->GetNumPoints()); }