BBox3f TriangleMeshTriangle4::update(char* prim, size_t num, void* geom) const { BBox3f bounds = empty; TriangleMeshScene::TriangleMesh* mesh = (TriangleMeshScene::TriangleMesh*) geom; for (size_t j=0; j<num; j++) { Triangle4& dst = ((Triangle4*) prim)[j]; ssei vgeomID = -1, vprimID = -1, vmask = -1; sse3f v0 = zero, v1 = zero, v2 = zero; for (size_t i=0; i<4; i++) { if (dst.primID[i] == -1) break; const unsigned geomID = dst.geomID[i]; const unsigned primID = dst.primID[i]; const TriangleMeshScene::TriangleMesh::Triangle& tri = mesh->triangle(primID); const Vec3fa p0 = mesh->vertex(tri.v[0]); const Vec3fa p1 = mesh->vertex(tri.v[1]); const Vec3fa p2 = mesh->vertex(tri.v[2]); bounds.extend(merge(BBox3f(p0),BBox3f(p1),BBox3f(p2))); vgeomID [i] = geomID; vprimID [i] = primID; vmask [i] = mesh->mask; v0.x[i] = p0.x; v0.y[i] = p0.y; v0.z[i] = p0.z; v1.x[i] = p1.x; v1.y[i] = p1.y; v1.z[i] = p1.z; v2.x[i] = p2.x; v2.y[i] = p2.y; v2.z[i] = p2.z; } new (&dst) Triangle4(v0,v1,v2,vgeomID,vprimID,vmask); } return bounds; }
BBox3f TriangleMeshTriangle1v::update(char* prim, size_t num, void* geom) const { BBox3f bounds = empty; const TriangleMeshScene::TriangleMesh* mesh = (const TriangleMeshScene::TriangleMesh*) geom; for (size_t j=0; j<num; j++) { Triangle1v& dst = ((Triangle1v*) prim)[j]; const unsigned geomID = dst.geomID(); const unsigned primID = dst.primID(); const TriangleMeshScene::TriangleMesh::Triangle& tri = mesh->triangle(primID); const Vec3fa v0 = mesh->vertex(tri.v[0]); const Vec3fa v1 = mesh->vertex(tri.v[1]); const Vec3fa v2 = mesh->vertex(tri.v[2]); new (&dst) Triangle1v(v0,v1,v2,geomID,primID,mesh->mask); bounds.extend(merge(BBox3f(v0),BBox3f(v1),BBox3f(v2))); } return bounds; }