ABOUT ME

-

  • 스카이박스 구조 변경
    Programming/DirectX12 2022. 3. 15. 21:23

     

    Graduation Project

    문제점

    Skybox::Skybox(const array<shared_ptr<Mesh>, 6>& meshes, const shared_ptr<Shader>& shader, const array<shared_ptr<Texture>, 6>& textures) : m_faces{ new GameObject[6] }
    {
        // 앞, 좌, 우, 뒤, 상, 하
        for (int i = 0; i < 6; ++i)
        {
            m_faces[i].SetMesh(meshes[i]);
            m_faces[i].SetShader(shader);
            m_faces[i].SetTexture(textures[i]);
        }
    }

    기존에는 클래스를 하나 만들어서 6개의 사각형과 6개의 텍스쳐를 갖고 6개의 사각형을 렌더링하는 방식이였다.

    하지만 현재 프레임워크 구조상 class Texture 객체를 여러개 만드는 것은 비효율적이다.

    더불어 부동소수점 문제인지 각 면 사이에 경계선이 보이는 경우가 있었다.

     

     

     

     

     

    해결 방법

    class Skybox : public GameObject
    {
    public:
    	Skybox() = default;
    	~Skybox() = default;
    
    	void Update(FLOAT deltaTime);
    	void SetCamera(const shared_ptr<Camera>& camera) { m_camera = camera; }
    
    private:
    	shared_ptr<Camera> m_camera;
    };
    // 스카이박스 생성
    m_skybox = make_unique<Skybox>();
    m_skybox->SetMesh(m_meshes["SKYBOX"]);
    m_skybox->SetShader(m_shaders["SKYBOX"]);
    m_skybox->SetTexture(m_textures["SKYBOX"]);
    m_skybox->SetCamera(m_camera);

    그래서 스카이박스에 사용할 큐브 메쉬를 하나와 그 큐브에 사용될 텍스쳐 하나가 되도록 변경했다.

    이렇게 구조를 변경함으로서 별개의 클래스가 아닌 게임오브젝트를 상속받는 스카이박스 클래스로 바꿀 수 있었다.

    코드 상으로도, 메모리 효율적인 면에서도 이게 더 낫다.

     

     

     

     

     

    TRANSFORM_MATRIX: 1 0 0 0 0 0 1 -5 0 -1 0 0 0 0 0 1 
    VERTEX_COUNT: 36
    
    P: 5 5 0
    N: 0 0 1
    T: 0.250783 0.9995
    MI: -1
    BI: 0 0 0 0
    BW: 0 0 0 0
    
    P: -5 5 0
    N: 0 0 1
    T: 0.500829 0.9995
    MI: -1
    BI: 0 0 0 0
    BW: 0 0 0 0
    
    P: -5 -5 0
    N: 0 0 1
    T: 0.500829 0.749213
    MI: -1
    BI: 0 0 0 0
    BW: 0 0 0 0
    
    ...

    스카이박스에 사용하는 큐브 메쉬는 3DS MAX로 직접 만들었다.

    그 후 내가 만든 FBXExporter로 내가 원하는 형태의 정점으로 추출한 뒤 사용했다.

    이는 졸업작품에서 사용하는 모든 메쉬, 애니메이션이 동일하다.

     

     

     

     

     

    스카이박스

    이제 각 면의 경계선도 보이지않고 코드도 깔끔해졌다.

    댓글