3D Graphics/libigl

libigl에서 Colormap(Lookup Table) 사용하기

leonhong 2023. 5. 5. 14:51

Colormap을 사용하는 이유

 Colormap은 수학적인 결과를 색상으로 보고자 할때 많이 사용한다. 

 예를 들어 가우시안 곡률을 색상으로 보면 한눈에 개략적인 상황파악이 쉬워지고, 결과적으로 작성한 코드의 수식을 디버깅하기 용이해진다.

 

 

Colormap에 대하여

 Colormap은 0.0 ~ 1.0에 해당하는 값을 출력해주는 기능으로써 float N개짜리 vector를 넣어주면  N행 3열짜리 매트릭스 를 반환하는데 각 행에는 RGB값을 0.0 ~ 1.0 값으로 표현된 형태로 들어 있음.

 

 Colormap은 색상분포가 종류별로 많은데, 기본적으로는 RGB를 잘 섞은 Turbo 타입이 무난한거 같음

<igl::COLOR_MAP_TYPE_TURBO 타입 색상 분포>

 각 정점에 0.0 ~1.0 값에 해당하는 컬러맵을 대입해서 출력한 결과는 아래와 같음

 

Colormap 사용 방법

igl::colormap(igl::COLOR_MAP_TYPE_TURBO, res, true, C);

입력값으로 그라데이션 타입, vector배열, Normalize 옵션을 주면 색상 Matrix 반환해 줌.

res에 vector 배열을 입력하면 C에 색상 Matrix를 반환해 줌.

반환받은 색상 Matrix를 정점별 색상에 대입해 줌.

 

#include <igl/colormap.h>

VectorXd res(5);
res.coeffRef(0) = 0.5;
res.coeffRef(1) = 0;
res.coeffRef(2) = 0.5;
res.coeffRef(3) = 1;
res.coeffRef(4) = 0.5;
std::cout << "res :    " << std::endl << res << std::endl;

MatrixXd C;
igl::colormap(igl::COLOR_MAP_TYPE_TURBO, res, true, C);
std::cout << "color :    " << std::endl << C << std::endl;
// outpur of C
// 0.63323 0.99195 0.23937
// 0.18995 0.07176 0.23217
// 0.63323 0.99195 0.23937
// 0.4796 0.01583 0.01055
// 0.63323 0.99195 0.23937

//......
viewer.data().set_colors(C);
viewer.core().lighting_factor = 0;	// 빛을 끄고 균일한 색상으로 보기
//......