블로그 이미지
대갈장군

calendar

1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31

Notice

2008. 1. 15. 04:21 프로그래밍/DirectX

DirectShow (줄여서 DS)는 원래 DirectX (줄여서 DX)의 일부였단다... (정확히는 모름)

DX안에는 DS뿐만 아니라 DirectPlay, Direct... 등등 뭐가 많이 있단다.

그런데 이 중에서도 왜 나는 DS는 참 흥미로운 놈인것 같다.

아직 DS에 대한 책이나 참고자료를 보지 않아서 저녀석의 세부사항은 전혀 모르지만 한가지 분명한것은 DS는 입력 영상과 출력 영상을 조절해주는 놈이라는 것이다.

사실 컴퓨터로 들어오는 입력 영상은 수없이 많다. 대표적인 예로 카메라. CCTV 같은 실시간 촬영 카메라의 경우 초당 수십 프레임의 영상이 컴퓨터로 들어오게 되는데 이때 들어오는 영상은 물론 어떤 색상의 어떤 사이즈를 가지는 그림들일것이다.

이렇게 들어오는 임의의 입력 영상을 화면에 출력하기 위해서는 현재 모니터에서 사용하고 있는 색상으로 바꿔줘야 할 의무가 있다. 바로 이럴때 사용하는 것이 DS인데 Windows가 DS를 이용해서 정말로 색상 처리를 해주는지는 잘 모르겠지만 아마도 그럴것 같다.

DS가 사실 Window API 라이브러리 이니까 OS에도 그대로 사용되지 않을까 싶다.

아무튼, 이 DS라는 놈은 영상의 입력과 출력을 고속으로 처리해주는, 그리고 그 둘사이에서 색상 타입 변경, 렌더링, 필터링등을 처리해 주는 특화된 API라이브러리 라고 나는 생각한다.

물론 이것은 전적으로 나의 개념이지 책에서 설명하는 이야기가 아니다...=.=

posted by 대갈장군
2008. 1. 11. 07:32 프로그래밍
C++를 예전부터 알아왔지만 그저 외워야 할, 알아야 할 언어라고 생각했을뿐 그 진정한 필요성과 효용에 대해서는 통감한 적이 없었다.

하지만 현재 여러사람이 하는 프로젝트를 하다보니 이게 왜 필요한가 그리고 왜 C++같은 객체 지향적 언어가 필요한가를 심히 알것 같다.

우선 객체 지향 언어의 대표적인 특징이 캡슐화가 꼭 그룹 프로젝트에서는 필요하다고 본다.

물론 코드가 적고 간단한 경우는 오히려 이놈의 객체 지향 언어가 짜증난다. 생성자, 파괴자, 멤버 함수, 공개, 보호, 등등... 이거 뭐 제대로 작동하게 만들기 부터 쉽지가 않다.

하지만 제대로 만들어진 클래스 한개의 파워는 상상을 초월하는 것 같다.

진정한 부품 조립형 프로그래밍의 파워가 바로 클래스에서 출발하는 것이다.

우리 연구실에서 주로 사용하는 TCP/IP 통신을 누군가가 멎진 클래스로 만들어서 배포했다... 사용을 어떻게하는지 읽어보는데 시간이 좀 소모되겠지만 그 사용 효과는 끝내준다.

마치 우리가 C를 처음 배울때 printf 하나만으로도 놀랬던 그 시절로 돌아가는 기분을 느끼게 해준다.

수업들으면서 C로 프로그래밍 할때는 한번 짜놓고 나면 6개월 정도 지나서 다시 볼려고 하면 골이 띵 해온다... 하지만 객체 지향으로 짜 놓고 약간의 주석과 사용방법 등만 기술해 놓으면 언제든지 부품처럼 가져다 와서 쓸수 있으니 이 얼마나 좋은가?

비록 이번 학기에 들었던 교수님의 말에 의하면 객체 지향 언어는 곧 망할거라는데... 글쎄? 프로그래밍에 아직 무지한 나로써는 아닌거 같은데요? =.=
posted by 대갈장군
2008. 1. 10. 07:45

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

2008. 1. 10. 06:19 프로그래밍

사실 영상 처리 분야를 공부하면서 그닥 관심두지 않았던 부분중에 하나가 DirectX인데 이놈이 갑자기 내 골을 아프게 한다.


교수님의 부탁으로 DirectShow strmbase.lib라는 라이브러리를 필요로하게 되었는데 이놈이 뭐하는 놈인지 아직 모른다.


근데... 젠장할 설치가 졸~라 어려웠다. 우선 2005년인가 몇년부터 원래 DirectX SDK에 포함되어 있던 이 놈이 뚝 떨어져 나가 버렸단다. 이것은 microsoft사가 이 놈을 버린 자식으로 취급해서라는데 정확한 원인은 모르겠다.


우찌되었든 MS사도 책임이 있다... =.= 설치를 쉽게 하게 해줘야 할꺼 아냐!~~ 세상 프로그래머 모두가 다 잘하는건 아니잖아~~ 초보자도 생각해줘야지!!


우쨌든. 그래서 나는 DirectShow가 현재는 Platform SDK에 편입되어 있다는 소식을 접하고 최신 PSDK를 받았다. 2003 server R2 어쩌고 저쩌고... 하여튼 MS 홈페이지에서 설치를 했다.


그래서~ 설치된 폴더를 뒤적거려본 결과 이놈의 strmbase.lib는 없었다. 두둥.... 알고보니 이놈을 사용하려면 만드시 컴파일을 해야 한다고 하는데 젠장... 다른 문제는 이 놈을 build할 프로젝트 파일이 없다!!!


예전에 OpenCV를 사용할때는 프로젝트 파일이 있어서 알아서 lib 파일을 만들어 줬는데 이런 XX는 그런게 없었다. 다만 흐릿하게 makefile이 내 눈에 보였다. 기본적으로 makefile은 UNIX에서 컴파일을 위해 사용하는 매크로 코드인데? 라는 생각이 들어서 윈도우에서도 make라는 명령이 있는지 검색을 해보았다.


아... 그랬더니 윈도우에도 그런 것과 유사한 nmake라는 명령이 있지않은가?? 상당히 놀라웠다.... 그렇다면 왜 MS는 자신들이 자랑하는 VS 2005의 프로젝트 파일로 만들기 보다 굳이 힘든 nmake라는 도스 명령어를 사용하는가?


참, 그리고 저놈을 실행할때는 웃기게도 윈도우에 설치된 PSDK의 메뉴에 들어가서 retail version으로 dos command line을 실행해야만 된다는 점이다. 안그러면 안된다.... 쓰블....


암튼, 이래 저래 고생해서 그 힘들다는 strmbase.lib를 만들어 냈다. 이제부터 이놈이 뭐하는 놈인지 알아봐야 겠네.... 에휴..

posted by 대갈장군
2007. 12. 1. 01:20 OpenGL

glRasterPos 함수와 glWindowPos 두 함수는 얼핏 보기에는 비슷해 보인다. 하지만 큰 차이점이 있다.


먼저 내가 어떤 상황에서 두 함수를 사용할 일이 있었는지를 설명해 보자.


내가 현재 작성중인 프로그램에서는 수십장의 화면을 미리 만들어서 glReadPixels를 이용해서  메모리에 저장해


놓았다가 그것을 glDrawPixels를 이용해서 빠르게 보여주는 것이다.


뭐 물론 실시간을 보여주면 안되냐는 간단한 질문을 할 수가 있다..=.=


하지만 문제는 하나의 화면 렌더링에 걸리는 시간이 크기 때문에 그럴수 없다는 것이다.


그래서 glDrawPixels를 실행할때는 반드시 현재의 Raster 위치 (즉, 그림을 그려넣기 시작할 왼쪽 아래 시작 부분)이 어딘지를 확인해야 한다.


만약 그 값이 minus이거나 invalid 한 값이라면 화면에는 당연히 아무것도 그려지지 않는다.


처음에 나는 단순하게 glDrawPixels 명령 바로 위에 glRasterPos2i(0, 0)을 했다.


단순히 생각해서 Raster 위치를 window coordinates (사용자가 보는 window의 왼쪽 제일 구석 지점)의 0, 0으로 이동시키고자 했던 것이다.


하지만 중요한 점을 간과했으니 이놈은 화면에 존재하는 vertex처럼 matrix에 의해 변환이 된다는 것이다.


고로 내가 이전에 model_view matrix를 사용했고 loadidentity로 초기화 시켜 놓지 않았다면 이전에 남아있는 행렬 변환이 여기서 적용되게 되는 것이다.


그 결과 값이 터무니 없는 값으로 나오게 되었고 화면에는 깜깜한 배경외에는 아무것도 보이지 않았다.....


나중에 알았지만 이 함수를 대체할수 있는것이 OpenGL version 1.4이후에 나왔으니 바로, glWIndowPos 함수다.


이것은 행렬 변환, 치환 이런 것에 전혀 개의치 않고 현재의 윈도우 좌표계를 절대적인 값으로 적용하여


raster의 위치를 잡는다. 고로 이 함수로 glWindowPos3f(0.0, 0.0, 0.0)을 하면 현재 내 출력 윈도우의


좌표계에서 무조건 (model view matrix고 나발이고) 0, 0을 기준으로 그림을 그려 넣게 된다...


두개중에 어떤것을 사용해야 할지는 경우에 따라 다르겠지만 중요한 사실은 두 함수는 행렬 변환 matrix에 영향을 받느냐 혹은 안받느냐가 가장 큰 차이점이라는 것이다.... 명심하자.

'OpenGL' 카테고리의 다른 글

OpenGL Rendering Context v.s. Windows Device Context  (0) 2009.03.12
Oh my god... 이게 사진이 아니라고?  (0) 2008.01.18
OpenGL 에서 조명 설정에 관하여...  (0) 2007.11.16
Stencil Buffer의 사용법  (6) 2007.09.22
OpenGL  (0) 2007.09.19
posted by 대갈장군
2007. 11. 16. 01:21 OpenGL

OpenGL을 사용하면서 조명을 사용할 경우 알아둬야 할 몇가지 중요한 포인트가 있다.


단순히 예전에는 빛을 켜면 걍 물체의 현재 색상, 즉 파란공이면 파랗게 빨강공이면 빨간색으로 나올줄 알았다. 무식한 발상이 아닐 수 없다.


OpenGL에서는 물체가 어떤 색으로 나타나게 될지를 결정하는 두가지 중요한 요소가 있으니 바로 조명의 색상과 물체의 반사색 이다.


조명의 색상이 중요한 것은 당연지사. 파란불이 비추어지면 물체가 흰색이라해도 푸르스름할 것이고 만약 물체가 빨간색이라면 광학 원리상 물체는 빨간색 빛 이외에는 다 흡수하므로 파란 색 빛을 다 흡수하여 검은 물체로 보여질 것이다.


다음으로 물체의 반사색인데 내가 물체의 vertex 마다 어떤 색상을 지정했건 간에 glMaterial*() 함수를 이용해 물체의 반사색을 다른 걸로 설정하면 그 정의된 색으로 입사하는 빛을 반사한다는 것이다.


또한 OpenGL에는 3가지 빛의 속성을 설정 가능한데 우선 주변광 (ambient light)로써 이것은 우리 주위에 은근히 존재하는 빛을 말한다. 형광등에서 나온 빛이 온 방을 환하게 하는 그런 분위기의 빛이다.


다음으로 분산광인데 (diffuse light) 이것은 반사되어 퍼져나가는 색상을 말한다. 이 색상이 바로 물체의 색상을 결정짓는데 가장 큰 역활을 한다. 현실과 유사하게 만들기 위해서는 조명의 주변광은 적게 주고 조명의 분산광은 적당한 색으로 주고 (흰색에 가깝게)  물체의 분산광을 자신이 원하는 색상으로 만들면 물체가 자신이 원하는 색상으로 나타나게 만든다.


그리고 마지막 빛으로 반사광(specular light)인데 반사광이라기보단 highlighting 색상이 더 쉽게 이해될것 같다. 즉 물체에 입사하는 빛을 강하게 (분산광처럼 퍼져나가는 빛이 아니라) 반사하는 색상을 말한다. 은이나 금 같은 물체에 빛을 비추면 일부분이 강하게 반사되면서 눈이 부시게 되는 현상이 나타나는데 바로 그 부분의 색상을 결정하는 것이다. 이것은 당연히 들어오는 빛의 색을 반사하는 것이 현실과 유사하므로 주로 입사광의 색상을 따라간다.


마지막으로 한가지 중요한 사실은 내가 원래 설정한 물체의 색상, 즉 각 vertex마다 설정한 색상을 그대로 보여주기 위해서는 두가지 방법이 있다.


1) 빛을 설정하지 않는다. 조명을 설치하지 말라는 말. 그러면 원래 색상이 그대로 나옴

2) 만약 조명을 설치했다면 glEnable(GL_COLOR_MATERIAL)을 활성화 시켜서 물체의 색상이 나오도록 한다.

개인적으로 2번이 더 쉽다고 생각되는데 처리 시간이 1번보다 더 걸릴것으로 예상된다.



'OpenGL' 카테고리의 다른 글

OpenGL Rendering Context v.s. Windows Device Context  (0) 2009.03.12
Oh my god... 이게 사진이 아니라고?  (0) 2008.01.18
glRasterPos와 glWindowPos  (1) 2007.12.01
Stencil Buffer의 사용법  (6) 2007.09.22
OpenGL  (0) 2007.09.19
posted by 대갈장군
2007. 11. 15. 03:30 나의 이야기

딱히 붙일 제목이 없는 글이다. 카테고리도 없는 일기 같은 글이다.


아마 모두들 그렇겠지만 가끔식 과거의 기억들이 떠오를 떄가 있다. 좋은 기억, 안좋은 기억, 흐뭇한 기억, 부끄러운 기억, 미소짓게 만드는 기억등...


늘 앞만 보며 걷다가 불쑥 찾아오는 그런 기억들이 나를 잠시 멈추고 생각하게 만든다.


방금도 이것 저것 공부하다가 문득 중학교 수학여행의 한 장면이 떠올라 나도 모르게 그 기억 속으로 잠시 여행을 다녀왔다.


흠. 헷갈리는데 초등학교 수학여행이었나? =.= 아무튼 춤추는 장면에 내가 있는데 정말 춤 못춘다... ㅋㅋ

무슨 생각으로 그리했을까? ㅋㅋ 그냥 가만히 있는게 나았을 것 같은데. 술도 안먹었는데 참나...


그런 짧은 여행을 마치고 나면 항상 하는 생각들이 있다. 우선 잊어버리고 싶지 않다는 것이다.


좋은 기억이든 나쁜 기억이든 그런 기억들이 내가 살아있음을 느끼게 해주기 때문이다.


사람들은 대부분 미래 지향적이다. '앞으로 이런 저런 일들을 할것이다.' 라고 자주 말하고 늘 그렇게 생각하며 살아간다.

하지만 일어나지 않은 미래를 향해 걸어나가는 우리 모두는 우리가 살아있음이 얼마나 소중한 것인지 그리고 행복한 것인지 알지 못하고 그저 '살아나가야 함'에 집중하고 있는 것은 아닐까?


그런 기억에 가끔씩 빠져보는 것이나, 혹은 미친놈 취급 받을까 잘 해보지 못했던, 길가다 무심코 하늘 쳐다보기 같은 것들이 알게 모르게 주는 '묘한 기분'이야 말로 우리가 얼마나 행복한지 또 살아간다는 것이 무엇인지 알게 해주는 것이 아닐까 싶다.


오늘도 어김없이 예전 추억속으로 들어가서 내가 하고 싶은대로, 내 마음에 내키는대로 시나리오를 바꾸고 상상의 나래를 펼처본다. ㅋㅋㅋ 우리 모두 솔직해 지자. 다들 그런 경험이 있을텐데? :)

'나의 이야기' 카테고리의 다른 글

죽기전에 "한번" 가볼만한 곳 - 알래스카  (0) 2008.10.16
털어버리기  (0) 2008.10.14
방관자 효과  (0) 2008.01.15
오늘의 단편 뉴스  (1) 2007.11.14
오오.. 드디어 시작이구나  (0) 2007.09.19
posted by 대갈장군
2007. 11. 14. 06:53 나의 이야기
어이없는 일이 있었다...

아는 형 차를 타고 가던중 CD에서 한국 노래 같은게 흘러 나왔다.

시작부분 음이 분명 트롯트였다. 근데 그 형은 최신곡 CD라고 했다.. 그래서 나는 말했지..

"어 트롯트네? 형 최신 트롯트도 들어요?"

하지만 돌아온 말은 충격적이었다.

"이거 텔미인데? 너 그 노래 몰라? =_=;?"

허걱... 텔미 였어? 사실 뉴스로만 원더걸스가 대통령 선거보다 더 열풍이라는 말만 들었지 처음부터 그 노래를 들어본 적이 없었던 것이었따....

암튼 그 형은 나보다 나이도 많고 올드 보이인데 내가 그것도 몰랐다는게 조금 무식해 보였다..

원더걸스는 유학생들에게 무료 CD를 보내 줘라!!! +.+

'나의 이야기' 카테고리의 다른 글

죽기전에 "한번" 가볼만한 곳 - 알래스카  (0) 2008.10.16
털어버리기  (0) 2008.10.14
방관자 효과  (0) 2008.01.15
그렇고 그런 이야기  (0) 2007.11.15
오오.. 드디어 시작이구나  (0) 2007.09.19
posted by 대갈장군
2007. 11. 14. 03:21 NavyField
사용자 삽입 이미지

독일 4차 전함 H39 Class


사용자 삽입 이미지

독일 5차 전함 H44 Class


사용자 삽입 이미지

영국 3차 전함 Prince of Whales


사용자 삽입 이미지

영국 3.5 차 전함 Vanguard


제일 위에서 부터 H39, H44, PoW, Vanguard. 개인적으로 가장 좋아하는 배는 PoW. 14 인치 쿼드가 적의 배에 떡으로 떨어질때 소리는 환상적이지.. ㅋㅋㅋ

뱅가드는 4차에 가까운 3차 전함이지만 그다지 맘에 들지는 않는다는.. :)

삽수야 미국 서버 접속해라.ㅋㅋ :) 내가 수병 빌려주께 돈이랑. :)

'NavyField' 카테고리의 다른 글

드디어 5차 전함  (3) 2007.11.09
게임은 내 인생의 절반  (0) 2007.09.19
posted by 대갈장군
2007. 11. 9. 00:40 NavyField
흠흠.. 드디어 독일 5차 전함을 손에 넣었다. 하지만 포병이 110이 안되서 쪼가 문제가 있다. 어찌되었든 탔다는게 중요.. 므헐헐헐... 사진은 조만간 올려야지.

'NavyField' 카테고리의 다른 글

전함들.. 두둥  (0) 2007.11.14
게임은 내 인생의 절반  (0) 2007.09.19
posted by 대갈장군