コード例 #1
0
ファイル: BVH.cpp プロジェクト: steveschwarcz/Path-Tracer-SS
void BVH::create(std::vector<AABBox>& boxes, const float sceneSize, const Point3& sceneCenter)
{
	m_leafNodes = new Node[boxes.size()];
	m_branchNodes = new Node[boxes.size() - 1];


	//TODO: give bounds for morton so all trans are not unit cube
	//first, assign morten codes
#if !_DEBUG
#pragma omp parallel for
#endif
	for (int i = 0; i < boxes.size(); i++)
	{
		boxes[i].setMortonCentroid(morton3D(boxes[i].centroid(), sceneSize, sceneCenter));
		m_leafNodes[i].isLeaf = true;
		m_leafNodes[i].box = new AABBox(boxes[i]);
	}

	//TODO: parallel sort?
	//then sort
	std::sort(boxes.begin(), boxes.end(), myobject);


	int i = 0;
	ProgressBar progressBar;

	//create heirarchy
//	generateHierarchyFullParallel(boxes);
			generateHierarchyStackLinear(boxes);
	//    	generateHierarchyRecursive(boxes, &m_branchNodes[0], 0, boxes.size() - 1, i, progressBar);

	//	progressBar.end();

	buildBoundingBox();
}
コード例 #2
0
    static Kokkos::View<size_t *, DeviceType>
    sortQueriesAlongZOrderCurve( Box const &scene_bounding_box,
                                 Kokkos::View<Query *, DeviceType> queries )
    {
        auto const n_queries = queries.extent( 0 );

        Kokkos::View<unsigned int *, DeviceType> morton_codes(
            Kokkos::ViewAllocateWithoutInitializing( "morton" ), n_queries );
        Kokkos::parallel_for(
            ARBORX_MARK_REGION( "assign_morton_codes_to_queries" ),
            Kokkos::RangePolicy<ExecutionSpace>( 0, n_queries ),
            KOKKOS_LAMBDA( int i ) {
                Point xyz = Details::returnCentroid( queries( i )._geometry );
                translateAndScale( xyz, xyz, scene_bounding_box );
                morton_codes( i ) = morton3D( xyz[0], xyz[1], xyz[2] );
            } );