OpenGL 사용시 GLUT는 사용하지 않았었는데, 

남의 소스를 컴파일할 때 간혹 필요한 경우가 있어서 정리하고자 올립니다.


바이너리만 필요하신 분이라면 아래 파일을 다운 받으면 됩니다.


먼저 OpenGL 사이트로 이동하여 아래의 카테고리로 이동합니다.


About GLUT 항목을 클릭하여 이동합니다.


각자 원하는 항목으로 이동하면 됩니다.

저 같은 경우는 윈도우에서 사용할 거라 "Nate Robin's GLUT for Windows page" 항목을 선택 하겠습니다.


바이너리가 필요하신 분은 빨간색을, 소스가 필요하신 분은 파란색 박스를 선택하여 다운로드 합니다.

저는 바이너리가 필요하여 glut-3.7.6-bin.zip을 다운로드 받았습니다.


다운로드 한 파일을 압축 해제한 상태입니다.

헤더 파일과 dll, lib를 필요한 곳에 복사/이동 하여 사용하면 됩니다.

'라이브러리 > OpenGL' 카테고리의 다른 글

Yaw Pitch Roll  (0) 2013.11.19



ply 파일을 읽어서 출력하는 프로그램입니다. ply 파일은 PhotoSynth에서 SynthExport프로그램을 통해 얻을 수 있습니다.


개발 환경은 아래와 같습니다.

Win x64

Visual Studio 2010 SP1

OpenGL




 




'프로그래밍 관련 > 자작 프로그램' 카테고리의 다른 글

각도기 프로그램  (60) 2013.11.28
위경도 도, 도분, 도분초 변환  (19) 2013.10.17
EXIF Viewer, EXIF 뷰어  (7) 2013.10.05
무료 로또 프로그램 - 오뇽 로또  (393) 2013.09.13
넷마블 틀린그림찾기 매크로  (17) 2013.04.01
HSV Cam Viewer  (4) 2013.03.31
HSV Image Viewer  (1) 2013.03.31

OpenGL로 구현한 프로그램에 화면 캡쳐 기능이 필요해서 오동님 블로그를 참조해서 사용하다가 리눅스(Qt)에서도 사용하게 될 일이 있어서 수정한 거 올립니다. 확인 결과 MFC, Win32 API 에서 문제 없이 잘 동작하며 리눅스에의 확인은 제 친구가 했는 데 리눅스에서도 문제 없이 잘 동작한다고 하네요.(비트맵 관련 구조체가 없어서 구조체는 직접 추가했다고 함)


void ScreenCapture( const char *strFilePath )
{
	//비트맵 파일 처리를 위한 헤더 구조체
	BITMAPFILEHEADER	BMFH;
	BITMAPINFOHEADER	BMIH;

	int nWidth = 0;
	int nHeight = 0;
	unsigned long dwQuadrupleWidth = 0;		//LJH 추가, 가로 사이즈가 4의 배수가 아니라면 4의 배수로 만들어서 저장

	GLbyte *pPixelData = NULL;				//front buffer의 픽셀 값들을 얻어 오기 위한 버퍼의 포인터

#ifdef WIN32
	//윈도우의 클라이언트 영역 좌표
	RECT ImageRect;
	GetClientRect( *m_hWndCopy, &ImageRect );			

	//이미지 영역 좌표를 이용하여 실제 이미지의 사이즈를 계산
	nWidth  = ImageRect.right - ImageRect.left;		//윈도우 버전의 경우 사이즈 변경이 되므로 그때그때 조사
	nHeight = ImageRect.bottom - ImageRect.top;

#else
	nWidth  = 1024;		//(나의 경우)리눅스에서의 경우 해상도 고정이므로 그 값을 입력
	nHeight = 768;

#endif

	//4의 배수인지 아닌지 확인해서 4의 배수가 아니라면 4의 배수로 맞춰준다.
	dwQuadrupleWidth = ( nWidth % 4 ) ? ( ( nWidth ) + ( 4 - ( nWidth % 4 ) ) ) : ( nWidth );

	//비트맵 파일 헤더 처리
	BMFH.bfType  = 0x4D42;		//B(42)와 M(4D)에 해당하는 ASCII 값을 넣어준다.
	//바이트 단위로 전체파일 크기
	BMFH.bfSize  = sizeof( BITMAPFILEHEADER ) + sizeof( BITMAPINFOHEADER ) + ( dwQuadrupleWidth * 3 * nHeight );
	//영상 데이터 위치까지의 거리
	BMFH.bfOffBits = sizeof( BITMAPFILEHEADER ) + sizeof( BITMAPINFOHEADER );

	//비트맵 인포 헤더 처리
	BMIH.biSize				= sizeof( BITMAPINFOHEADER );		//이 구조체의 크기
	BMIH.biWidth			= nWidth;							//픽셀 단위로 영상의 폭
	BMIH.biHeight			= nHeight;							//영상의 높이
	BMIH.biPlanes			= 1;								//비트 플레인 수(항상 1)
	BMIH.biBitCount			= 24;								//픽셀당 비트수(컬러, 흑백 구별)
	BMIH.biCompression		= BI_RGB;							//압축 유무
	BMIH.biSizeImage		= dwQuadrupleWidth * 3 * nHeight;	//영상의 크기
	BMIH.biXPelsPerMeter	= 0;								//가로 해상도
	BMIH.biYPelsPerMeter	= 0;								//세로 해상도
	BMIH.biClrUsed			= 0;								//실제 사용 색상수
	BMIH.biClrImportant		= 0;								//중요한 색상 인덱스

	pPixelData = new GLbyte[ dwQuadrupleWidth * 3 * nHeight ];	//LJH 수정

    //프런트 버퍼로 부터 픽셀 정보들을 얻어온다.
	glReadPixels(
		0, 0,					//캡처할 영역의 좌측상단 좌표
		nWidth, nHeight,		//캡처할 영역의 크기
		GL_BGR,					//캡처한 이미지의 픽셀 포맷
		GL_UNSIGNED_BYTE,		//캡처한 이미지의 데이터 포맷
		pPixelData				//캡처한 이미지의 정보를 담아둘 버퍼 포인터
		);

	{//저장 부분
		FILE *outFile = fopen( strFilePath, "wb" );
		if( outFile == NULL )
		{
			//에러 처리
			//printf( "에러" );
			//fclose( outFile );
		}

		fwrite( &BMFH, sizeof( char ), sizeof(BITMAPFILEHEADER), outFile );			//파일 헤더 쓰기
		fwrite( &BMIH, sizeof( char ), sizeof(BITMAPINFOHEADER), outFile );			//인포 헤더 쓰기
		fwrite( pPixelData, sizeof( unsigned char ), BMIH.biSizeImage, outFile );	//glReadPixels로 읽은 데이터 쓰기

		fclose( outFile );	//파일 닫기
	}

	if ( pPixelData != NULL )
	{
		delete pPixelData;
	}
}


아래는 위의 함수로 저장한 bmp파일들입니다.



HSV Cam Viewer.zip

Desktop.7z.001

Desktop.7z.002

Desktop.7z.003

Desktop.7z.004


프로그램 실행하려면 OpenCV1.0은 필수로 설치해야함


HSV Image Viewer가 Image를 읽어와 처리하는 정적 이미지(정지 영상) 기반이라면 HSV Cam Viewer는 PC캠에서 받아오는 실시간 이미지를 처리하는 것입니다. Image Viewer는 하루? 이틀 정도 걸려 만들었고.. Cam은 삽질 좀 하느라 일주일 정도 걸린듯요ㅠㅠ


Cam Viewer에는 간단한 크로마키 기능도 추가 됐습니다. 아래 동영상 2개 보면 크로마키에 대해서 대충 감이 옵니다 



크로마키 할 때 중요한게 카메라의 성능과 주변에 흔하지 않은 색(울트라마린 블루=크로마키색) 등인데, 집에 있는 카메라는 성능도 달리고 마땅한 배경도 없어서 아쉽네여..



아래부터 프로그램 캡쳐

 



'프로그래밍 관련 > 자작 프로그램' 카테고리의 다른 글

각도기 프로그램  (60) 2013.11.28
위경도 도, 도분, 도분초 변환  (19) 2013.10.17
EXIF Viewer, EXIF 뷰어  (7) 2013.10.05
Point Cloud  (0) 2013.10.02
무료 로또 프로그램 - 오뇽 로또  (393) 2013.09.13
넷마블 틀린그림찾기 매크로  (17) 2013.04.01
HSV Image Viewer  (1) 2013.03.31


HSV 색상 모델로 레이저 트래킹 하려고 HSV에 대해 알아보다가 마틴이란 분의 블로그에 들리게 되었고, 거기 있는 프로그램 보고 몇 가지 더 추가해서 한 번 만들어봤습니다.


RGB나 YCbCr, YIQ, CMYK 등의 색상 모델은 대체로 시스템이나 하드웨어에서의 사용을 위해 만들어진 색상 모델이라면HSV(Hue Saturation Value)란 간단히 말해서인간의 색인지에 기반을 둔 사용자 지향성 색상모델입니다.


인간이 색을 인지하는 방식이 직관적이고 자연스럽기 때문에 HSV 컬러 모델은 시각 예술에 자주 쓰인다고 하네요. 일상에서도 자주 쓰이는데, 오렌지 색을 표현할 때 RGB성분으로 R=245, G=110, B=20으로 표현하는 것보다는, 색상(H)은 오렌지색이며 명도(V)는 밝고 채도는 짙다고 표현하면 어떤 색인지 금방 떠올릴 수 있을 것입니다. 이처럼 인간이 색을 표현할 때 자주 사용하는 표현 방법이 HSV 표현과 비슷하다고 합니다.


아래는 HSV 색 공간 모형


아래는 RGB를 HSV로 변환하는 공식



아래는 프로그램 이미지 입니다.







'프로그래밍 관련 > 자작 프로그램' 카테고리의 다른 글

각도기 프로그램  (60) 2013.11.28
위경도 도, 도분, 도분초 변환  (19) 2013.10.17
EXIF Viewer, EXIF 뷰어  (7) 2013.10.05
Point Cloud  (0) 2013.10.02
무료 로또 프로그램 - 오뇽 로또  (393) 2013.09.13
넷마블 틀린그림찾기 매크로  (17) 2013.04.01
HSV Cam Viewer  (4) 2013.03.31

+ Recent posts