vulkan

vulkan 쉬어가기 시어핀스키 삼각형

comwitch 2023. 6. 14. 19:36

시어핀스핀 삼각형을 만들자!

 

프렉탈 도형이라 간단한 재귀함수로 만들어 주면 된다.

 

    std::vector<LveModel::Vertex> FirstApp::makeSierpinskiTriangle(LveModel::Vertex A, LveModel::Vertex B, LveModel::Vertex C, int Iteration)
    {
    	//Iteration이 0이면 그대로 삼각형 벡터 출력
        if (Iteration == 0)
        {
            std::vector<LveModel::Vertex> vectors;
            vectors.push_back(A);
            vectors.push_back(B);
            vectors.push_back(C);

            return vectors;
        }

		//아닐시 3분할해서 상단 좌하단 우하단에 recurrsion돌려버리기
        LveModel::Vertex tmpAB = {{0.0f, 0.0f}};
        tmpAB.position[0] = 0.5f * A.position[0] + 0.5f * B.position[0];
        tmpAB.position[1] = 0.5f * A.position[1] + 0.5f * B.position[1];
        LveModel::Vertex tmpBC = { {0.0f, 0.0f} };;
        tmpBC.position[0] = 0.5f * B.position[0] + 0.5f * C.position[0];
        tmpBC.position[1] = 0.5f * B.position[1] + 0.5f * C.position[1];
        LveModel::Vertex tmpAC = { {0.0f, 0.0f} };;
        tmpAC.position[0] = 0.5f * A.position[0] + 0.5f * C.position[0];
        tmpAC.position[1] = 0.5f * A.position[1] + 0.5f * C.position[1];

        std::vector<LveModel::Vertex> tmpVectorA = makeSierpinskiTriangle(A, tmpAB, tmpAC, Iteration-1);
        std::vector<LveModel::Vertex> tmpVectorB = makeSierpinskiTriangle(tmpAB, tmpBC, B, Iteration-1);
        std::vector<LveModel::Vertex> tmpVectorC = makeSierpinskiTriangle(tmpAC, C, tmpBC, Iteration-1);

        tmpVectorA.insert(tmpVectorA.end(), tmpVectorB.begin(), tmpVectorB.end());
        tmpVectorA.insert(tmpVectorA.end(), tmpVectorC.begin(), tmpVectorC.end());


        return tmpVectorA;
    }

iteration을 7번으로 했을 때. 결과물

 

정답보니까 아에 vertices vector을 매개변수로 넣어가지고 해버렷다. https://pastebin.com/0bu2a2ZP