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

Function extend_grid

tutorials/common/scenegraph/scenegraph.cpp:1412–1460  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1410 }
1411
1412 bool extend_grid(RTCGeometry geom, std::vector<bool>& visited, std::deque<unsigned int>& left, std::deque<unsigned int>& top, std::deque<unsigned int>& right)
1413 {
1414 // top
1415 // | <----------
1416 // | /\ .
1417 // | left | right
1418 // | |
1419 // \/ |
1420
1421
1422 /* test if all neighboring faces of top exist and are properly connected */
1423 unsigned int prev_opposite_edge = -1;
1424 for (size_t i=0; i<top.size(); i++)
1425 {
1426 const unsigned int edge = top[i];
1427 const unsigned int opposite_edge = rtcGetGeometryOppositeHalfEdge(geom,0,edge);
1428 if (opposite_edge == edge) return false;
1429 const unsigned int opposite_face = rtcGetGeometryFace(geom,opposite_edge);
1430 if (visited[opposite_face]) return false;
1431
1432 /* test if we share an edge with the last quad */
1433 if (i > 0) {
1434 const unsigned int border0 = rtcGetGeometryOppositeHalfEdge(geom,0,rtcGetGeometryPreviousHalfEdge(geom,prev_opposite_edge));
1435 const unsigned int border1 = rtcGetGeometryNextHalfEdge(geom,opposite_edge);
1436 if (border0 != border1) return false;
1437 }
1438 prev_opposite_edge = opposite_edge;
1439 }
1440
1441 /* extend border edges */
1442 for (size_t i=0; i<top.size(); i++)
1443 {
1444 const unsigned int edge = top[i];
1445 const unsigned int opposite_edge = rtcGetGeometryOppositeHalfEdge(geom,0,edge);
1446 assert(opposite_edge != edge);
1447 const unsigned int opposite_face = rtcGetGeometryFace(geom,opposite_edge);
1448 assert(!visited[opposite_face]);
1449 visited[opposite_face] = true;
1450 unsigned int next_edge = opposite_edge;
1451 next_edge = rtcGetGeometryNextHalfEdge(geom,next_edge);
1452 if (i == 0) right.push_back(next_edge);
1453 next_edge = rtcGetGeometryNextHalfEdge(geom,next_edge);
1454 top[i] = next_edge;
1455 next_edge = rtcGetGeometryNextHalfEdge(geom,next_edge);
1456 if (i == top.size()-1) left.push_front(next_edge);
1457 }
1458
1459 return true;
1460 }
1461
1462 void gather_grid(RTCGeometry geom, avector<Vec3fa>& positions, size_t width, size_t height, unsigned int* indices, avector<Vec3fa>& vertices, unsigned int edgey)
1463 {

Callers 1

Calls 6

rtcGetGeometryFaceFunction · 0.85
sizeMethod · 0.45
push_backMethod · 0.45

Tested by

no test coverage detected