0417 CoordinateSystemCvt

생각해보니까, 
    유니폼에서 각 렌더러에 따른 
        Factor줘서 곱해주면 되는 거 아닌가???
    정보 -> 행렬 -> 셰이더  이 순서대로 가는데,
        굳이 정보 부분에서 곱해줄 필요가 있나???
        버텍스 셰이더 부분에서 팩터 곱하는 게 제일 나을 듯?
        오버헤드? 그걸 신경쓸 때인가???

다시 생각해보니까, 
    뷰 매트릭스에서는 저기 위에 "정보" 부분에서의 변환이 필요하다.
    그냥 정보부분에서 깔끔하게 하는 방법이 없을까...

enum class CoordinateSystemType {
    OpenGL, // Right-handed, Z축이 나를 향하고 Y축이 위를 향함
    Vulkan, // Right-handed, Z축이 나와 같은 방향을, Y축이 아래를 향함
};

2D와 3D의 좌표계가 다르다.

참고 : 
    2D스탠다드는 OpenGL에서 Y축만 반전된 것임.
        = Z축은 신경쓰지 않지만, 나를 향함
        X축이 오른쪽을,
        Y축이 아래쪽을 향함. **********************************

    3D스탠다드는 OpenGL과 완전히 같음.
        = Z축이 나를, 
          X축이 오른쪽을,
          Y축이 위를 향함. ************************************

// 2D 스탠다드를 각 렌더러에 맞는 좌표계로 변환.
Vector2f Convert_2D_Standard_To_Specific_CoordSystem(
    const CoordinateSystemType& type,
    const Vector2f& v
) {
    switch (type) {
    case (CoordinateSystemType::OpenGL) :{
        return {v.x, -1.0f * v.y}; // 2D의 경우, GL은 Y축 반전 필요
        break;
    }
    case (CoordinateSystemType::Vulkan) :{
        return {v.x, v.y}; // 2D의 경우, VK는 반전 불필요
        break;
    }
    }
}


// 3D 스탠다드를 각 렌더러에 맞는 좌표계로 변환.
Vector3f Convert_3D_Standard_To_Specific_CoordSystem(
    const CoordinateSystemType& type,
    const Vector3f& v
) {
    switch (type) {
    case (CoordinateSystemType::OpenGL) :{
        return {v.x, v.y, v.z}; // 3D의 경우, GL은 반전 불필요
        break;
    }
    case (CoordinateSystemType::Vulkan) :{
        return {v.x, -1.0f * v.y, -1.0f * v.z}; // 3D의 경우, VK는 Y, Z축 반전 필요
        break;
    }
    }
}