Пример #1
0
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;
}
Пример #3
0
/* static */
VtArray<GfVec3d>
Hd_SmoothNormals::ComputeSmoothNormals(
    Hd_VertexAdjacency const * adjacency,
    int numPoints,
    GfVec3d const * pointsPtr)
{
    return _ComputeSmoothNormals(numPoints, pointsPtr,
        adjacency->GetAdjacencyTable(), adjacency->GetNumPoints());
}