본문 바로가기

코드103

Windows Platform SDK의 DirectShow 샘플 컴파일하기 ※ 내 방식은 너무 무식하다. DirectShow가 아닌 다른 샘플또한 모두 makefile을 고쳐야하는 것이다! 그러나 같이 공부하는 학우가 더 쉽고 빠른 방법을 찾았다. http://blog.daum.net/idzuno/6037863 사용된 SDK: Microsoft Platform SDK for Windows Server 2003 R2 Samples\Multimedia\DirectShow 에 있는 샘플들은 정적 라이브러리와 헤더 파일의 경로가 지정되어 있지 않아 컴파일되지 않는다. 이걸 컴파일하려면 다음과 같이 진행한다. 1. 환경 변수를 추가한다. 변수는 MSSDK로 한다. 아래의 수정된 makefile 을 받아 사용하려면 반드시 이 이름을 써야한다. 값은 SDK가 설치된 폴더로 한다(예: C:\.. 2006. 9. 29.
prototype for CxImage library 소개 http://www.codeproject.com/bitmap/cximage.asp 홈페이지 http://www.xdp.it/cximage.htm 교수가 임무를 하나 주었다. 화면을 캡처해서 전송하는 것이다. 간단하지만, 제대로 해보려니 고려할 사항이 많았다. 전송하기 쉽게 연속형 배열로 만들고, 전송 효율을 높이기 위해 압축도 해야 한다. 전송 단계에는 어떤 문제가 발생할 지 모른다. 현재 예상되는 문제는 (1) 전송 완료가 (매우!) 오래 걸리는 경우 (2) 전송 중 연결 실패 등이다. 이 문제를 회피하기 위해 일단 layer를 하나 두고 진행하려고 한다. 캡처는 쉽게 이루어졌으나, 비트맵의 래스터 처리가 문제였다. 게다가 압축도 해야한다. 그런고로 이미지 처리를 단순화시켜야 했다. CxImage.. 2006. 9. 18.
Inno Setup 5 Script 훌륭한 패키징 프로그램인 Inno Setup 5의 스크립트. 제작한 게임의 패키징을 위해 사용했다. 게임은 작지만 -.- 하나의 제품으로 완성해보고자 수고를 좀더 들였다. 작성한 스크립트의 기능은 다음과 같다.사용자의 컴퓨터에 Visual C++ 2005 DLL이 설치되었는지 검사하고, 없으면 설치한다.윈도우 XP 서비스팩 2가 운용되는 컴퓨터인지 확인하고, 그렇지 않으면 경고를 표시한 후 설치를 종료한다.선택한 언어에 따라 프로그램 그룹의 이름이 다르게 정해진다.선택한 언어에 따라 다른 파일을 설치한다.참고로 Inno Setup의 기능은 상용 프로그램 부럽지 않은 기능을 자랑한다. 사용하기 쉬울 뿐더러, 파스칼 형식의 자체 스크립트도 있어 입맛에 맞게 자유로이 바꿀 수 있다. 이만한 걸 한 개인이 만들.. 2006. 9. 9.
CQ 빌더 ※ 이 에디터는 더 이상 CQ를 위해서 사용될 수 없다. 너무 많은 사항이 변경되었기 때문이다. 안타깝지만, 개선할 시간도 없다. 공의 위치를 추출, 빛 조절, 일부 값 수정 등에만 유용하게 사용될 수 있다. Qt 사용에 대한 참고로 사용되길 바란다. [9.1] CQ라는 지능개발 게임의 스테이지를 구성하기 위해 만든 빌더. 에디터를 제작하기 위한 수요는 많고, Qt와 Ogre3D를 연계시키는 시도는 많았다. Ogre3D 포럼을 많이 참조했다. 사용 라이브러리: Qt 4.1.3 Open Source Edition : GUI가 예뻐서 채택한 GUI 라이브러리. 사용하기도 쉽다. 문서화도 좋고, 데모도 핵심을 찌른다.Ogre 1.2.1 Dagon : 그래픽 라이브러리. 개발 기간: 7.25 ~ 8.1 버전 파.. 2006. 8. 1.
버텍스 회전 이용하기 Ogre3D에서의 버텍스 회전 이동은 간단하게 이루어진다. 참조:http://www.ogre3d.org/wiki/index.php/Line3Dhttp://www.ogre3d.org/wiki/index.php/Quaternion_and_Rotation_Primer 작성한 코드는 MyManualObject라는 클래스를 갖고 있다. 이 클래스는 두 개의 메소드가 있다. 하나는 시작점과 끝점을 주어 3차원 공간 상의 선을 그린다. 또 하나는 3차원 형태의 화살표를 그린다. 화살표는 Z축 방향이 기본으로 그려진다. 회전을 위해 사원수 클래스가 쓰인다. Ogre3D에서는 사원수에 대한 개념 - Q(w,x,y,z)에서 w은 축에 대한 회전 정도, x,y,z은 물체가 이동할 축을 나타낸다는 점만 알면 쉽게 회전을 처리.. 2006. 7. 8.
VisualStudio 2005에서 QT 작업하기 목차 QT를 VS용으로 컴파일하기 VS에서 작업하기 UI 파일이 컴파일되지 않을 경우 QWidget을 상속받는 클래스를 사용할 때 QT를 VS용으로 컴파일하기 이 글은 아래 링크 중의 글에서 중요한 내용만 추리고, 약간의 주석을 단 것이다. http://www.qtnode.net/wiki/Qt4_with_Visual_Studio 먼 저 QT 라이브러리를 받아야 한다. 단 소스 파일을 받아야 한다. 위 링크에도 받을 수 있는 경로가 있다. 아니면 제작사인 TrollTech 홈페이지에서 받아도 된다. 어쨌든 소스가 있어야 다시 컴파일을 할 수 있다. 트롤테크가 제공하는 바이너리 파일에서 lib 파일이 없다. 한편, 컴파일된 파일을 올리기에는 너무 용량이 크다. 컴파일 후 용량이 1.2GB에 달한다는 사실만 .. 2006. 7. 6.
AABB 충돌 검사 방식에서의 정확한 구 검출 내가 구상한 게임은 다수의 구가 인접해있다. 따라서 Axis Aligned Bounding Box 형태의 충돌 검사는 부적절하다. 구를 덮기 위해 상자의 한 변은 최소한 구의 지름이 되어야 하는데, 아래 그림과 같은 문제가 발생한다. 그러나 AABB 방식은 엔진이 기본적으로 제공하는데다가, 검사도 빠르기 때문에 간단히 포기하기에는 아까웠다. 그래서 검출에는 AABB를 쓰고, 타당성 조사는 공식(직선과 점 사이의 최단 거리 구하기)을 사용하여 문제를 해결했다. 공식을 이해하는데 시간이 걸렸지만, 치환으로 유도되므로 간단하다고 할 수 있다. 인용: 좋은 게임을 만드는 핵심원리: 게임 수학과 물리. 거기에 이해하기 쉽게 주석을 곁들였다.(1) 직선 L의 방향 벡터를 구한다. 이 값은 단위 벡터가 되든 안되든 .. 2006. 7. 6.
빌보드 및 폰트 표시 테스트 현재 구상 중인 게임에서 구 안에 숫자를 표시해야 한다. 최초에는 배경을 두고 거기에 텍스트를 표시하려 했다. 이를 위해 Ogre3D에 쓸 수 있는 MovableText( http://www.ogre3d.org/wiki/index.php/MovableText)를 시험했다. (Ogre 1.21 필요) ※ 참고: MovableText에는 어떤 문제가 있다. 즉 어떤 특정한 글자 또는 짧은 문장이 표시되지 않는다는 점. Ogre3D 포럼에 어떤 한국사람도 질문했다. 일단 이 문제를 해결하는 건 간단. 표시할 문장 앞에 공백을 하나만 붙여주면 된다. MovableText는 버텍스버퍼를 직접 조작하여 각 문자마다 폴리곤 2개를 만들고, 폰트를 텍스처처럼 u, v 값을 얻어와서 매핑한다(u, v값은 미리 설정되는데.. 2006. 6. 29.
SubEntity의 메쉬에서 버텍스 정보 얻기 서브 메쉬에 각각 빌보드를 표시해야한다. 이번 데모는 다음 기능을 테스트하고자 함이다. - 서브 메쉬의 좌표 값을 읽고, 여기에 시험삼아 어떠한 오브젝트든지 찍어본다. 그 러나... 서브 메쉬의 위치, 크기 정보를 얻는 메소드는 따로 없다. 따라서 인덱스 버퍼를 직접 액세스하고, 이를 통해 최대, 최소값을 얻었다(이는 일전에 이미 시험해보았다). 그리고 이를 통해 서브 메쉬의 위치를 얻었다. 인덱스, 버텍스 버퍼를 힙에 복사한 후 데이터를 처리한다는 점이 걸렸다. 그러나 비디오 메모리를 필요할 때마다 액세스할 수는 없고(도스 시절이 아니다...) 잠근 다음 액세스하고 다시 해제해야한다. 이 때문에 코드 처리를 위해 비디오 메모리를 계속 잠그고 있을 경우 문제가 생길 수 있다. 이걸 개선하려고 해보았지만 .. 2006. 6. 29.
QT with Ogre 방학이 되어 간단한 게임을 만들어보고자 공부 중. 같이 할 사람이 없어서 쓸쓸하고 집중도 쉽지 않다... 현재 퍼즐 게임을 만들어보고자 하는데, 스테이지를 구성할 에디터부터 만들려고 하고 있다. 그러려면 아무래도 편리한 GUI 인터페이스가 필요하다. 내가 생각한 GUI 라이브러의 조건은 1. STL 사용 가능 2. 편리한 GUI 코딩이었다. MFC는 유감스럽게도 1번을 만족하지 못한다. 참, 먼저 OgreDotNet을 이용하려 했는데 Ogre 1.2와 연동이 쉽게 되지 않아 포기했다. 그래서 생각한 것이 일전에 테트리스를 만들어본 QT였다. Ogre 엔진은 렌더러를 생성할 때 인자값으로 외부 핸들, 즉 표시할 창의 포인터를 넘겨주면 그곳으로 출력을 한다. 모든 GUI 라이브러리에 동일하게 적용된다. 간단.. 2006. 6. 26.
MFC의 HTMLEdit 클래스를 이용한 응용 프로그램 브라우저에 표시된 HTML 일부를 드래그하여, MFC의 뷰에 붙여 넣을 수 있다. 구글의 노트북(http://www.google.com/notebook/) 웹어플리케이션에 감동받고 만들어보았다. MFC에는 이를 수행하는 클래스(HTMLEdit)가 있기 때문에 개발 난이도는 낮았다. Visual Studio 2005로 제작되었으므로, dll이 포함된 아래 패키지를 설치해야 한다. http://www.microsoft.com/downloads/details.aspx?familyid=32BC1BEE-A3F9-4C13-9C99-220B62A191EE&displaylang=en 프로그램을 종료시키면 파일로 저장한다. 윈도우 프로그래밍의 기말 과제로 급하게 수행되어 다음 문제가 있다.모든 데이터를 메모리 상에 로드.. 2006. 6. 19.
QTOPIA 테트리스 QT기반의 윈도우 매니저인 QTOPIA에서 실행되는 테트리스. 임베디드 응용 프로젝트로 만들어졌다. 이것저것 손보고, 디버깅 코드도 은근히 넣었더니 5백줄 가까이 된다. QTOPIA SDK PDA Edition 1.7.0 으로 작성되었다. 버튼을 눌러 블럭을 제어한다. 이걸로 테트리스를 두번째 짜봤다. 기타:SDK를 설치하면 /opt/Qtopia 폴더가 생긴다. 여기에 문서, 예제, 라이브러리 등이 위치한다.그림은 /opt/Qtopia/pics 에 위치한다.실행 파일은 /opt/Qtopia/bin 에 위치한다.아이콘 파일은 /opt/Qtopia/pics/inline 에 위치한다.버그가 있다: 다음 블록을 표시할 때, 길쭉한 블록을 표시할 때부터 다음 블록 표시가 깨진다. 메모리를 덮어 쓰는 곳이 있는 것.. 2006. 6. 15.
베지어 곡선 그리기 Visual Studio 2005 Express의 managed C++을 이용하여 제작되었다. 베지어 곡선 함수는 이미 MFC때부터 있었고 당연히 managed C++에서도 지원한다. 그래서 아주 쉽게 제작. 아쉬운 점은 제어 포인트의 추가/삭제를 반영하지 못했다는 점. 교수가 1시간만에 짜라는 바람에... 실행하려면 Visual C++ 2005 Redistriable Package를 설치해야 한다.http://www.microsoft.com/downloads/details.aspx?familyid=32BC1BEE-A3F9-4C13-9C99-220B62A191EE&displaylang=en 2006. 6. 13.
온라인 도서관리 4학년 1학기 과목인 소프트웨어 개발방법론의 프로젝트...라고 하지만 너무 약소하다. 교수가 개발 사양으로 준 것 CBD를 표방하지만, 교수는 소스 퍼오기를 권장하니 이 과목의 진심은 충분히 파악되었다. 온라인 도서 관리가 나의 조에게 주어졌는데 조원은 HTML도 모르고, 교수가 제공하는 FTP는 방화벽으로 교실(!) 내에서만 접속되고, DB는 윈도우즈 계정으로 로그인한 다음에 접속되고... 그저 노가다 뿐이었지만, 배운게 있다면 왜 모델 1의 유지 보수가 쉽지 않느냐 하는 것을 몸으로 익혔다. 하나의 서블릿에 모든 기능을 몰아넣다보니, 너무나 덩치가 크고, 관리도 어려웠다. DB 연결의 난점으로 해법을 찾은 것이 XML 파일의 입/출력을 통한 데이타 관리. 그러나 이에 따라 멀티스레드는 처리 불능..... 2006. 5. 22.
삼각형 그리기/이동/반전 2차원 상에서 삼각형을 그리고, 이동시키고, 반전(mirror)시키는 프로그램. 숙제이다. 간단한 문제지만 처음에 교수가 시간 제한을 두고 수업 시간에 시키는 바람에 개판으로 짜서, 오늘 술먹고 온 김에 완전히 뜯어 고쳤다. 실행 파일 프로젝트 파일 닷넷 라이브러리가 없어 실행이 안될 경우 여기서 다운받고, 실행 파일이 위치한 곳에 복사해야 한다: VS2005로 컴파일되었으며, Managed C++을 사용했다. 프로그램을 실행시키면 삼각형이 표시된다. 기능은 다음과 같다.Shape: 꼭지점이 표시되며, 이를 드래그하여 삼각형의 모습을 바꿀 수 있다.Mirror: 삼각형을 X축으로 반전시킨다.Translation: 삼각형 전체를 이동시킨다.Reset: 초기화 2006. 5. 18.
Java API for XML http://www.perfectxml.com/JAXP.asp 이 글은 위 링크의 문서를 기초하여 작성되었다. DOM 방식의 예제가 먼저 있으나, 오픈 API 기반은 SAXON 예제도 포함되어 있다. DOM은 문서 전체를 파싱하여 메모리에 로드하므로, 문서가 클 경우 SAX 형식으로 파싱해야 한다. 작성한 예제는 다음과 같다 넷빈 5.0으로 작성했으며, 톰캣 5.0이면 돌릴 수 있다. 예제는 회원 가입 시 XML에 저장하고, 회원 여부는 동일한 XML을 검색하여 수행한다. 먼저 다음 라이브러리를 임포트해야 한다. import org.w3c.dom.*; import javax.xml.parsers.*; import javax.xml.transform.*; import javax.xml.transform.d.. 2006. 5. 9.
AJAX로 구현한 동적 웹사이트 학교 프로젝트로 하게 된 웹 프로그래밍. 나는 뷰 측을 맡았고, 자바 스크립트 코딩을 하게 되었다. AJAX가 자바스크립트의 노가다 극한을 요구하다보니, 자바스크립트만 천줄이 넘는다... 덕분에 자바스크립트의 파워를 충분히 만끽했다. 디버깅만 빼면 정말 훌륭하다. 교수는 스트럿츠 프레임워크를 쓰도록 강요했는데, 나는 뷰를 AJAX로 구현했으므로 정적으로 업데이트되는 태그 라이브러리 등은 쓸 수 없었다. 스트럿트를 이해해야하는 필요성을 비껴나갔다고나 할까? 다만 뷰이다 보니 모델/컨트롤러가 없으면 테스트하기도 힘들고, 나중들어서야 동작시켜볼 수 있으므로 괜시리 고생할 가능성이 컸다. 그런 피해를 막기 위해, 쿠키와 서블릿을 이용해 자체적으로 테스트 모델을 만들어서 모델/컨트롤러 측 결과물이 전혀 없는 상태.. 2006. 5. 1.
Cohen-Sutherland Algorithm for line clipping 학교 숙제. 간단한 문제라고 생각했으나, 알고리즘과 실제는 좌표계가 달라 매우 혼동을 일으켰다. 게다가 Managed C++로 작성했는데 컨테이너도 익숙하지 않고 참조형 사용도 잘 안되어 매우 당황스러웠다. 참조형에 대한 이해가 필요하다 -_-; 이게 잘 안되어서 계속 배정으로 값을 넣을 수 밖에 없었다. 덕분에 코드가 참 할 말이 없다.... 이렇게 혼란스럽게 코딩해본 적은 처음인 것 같다. 좋은 경험을 했다. 알고리즘에 대한 쉬운 설명은 역시 위키피디아. http://en.wikipedia.org/wiki/Cohen-Sutherland 알고리즘에 대한 자세한 이해는 여기로. 복잡해보여도 조금만 집중하면 쉽게 이해할 수 있다. 그리 어려운 알고리즘은 아니다. 기울기에 대한 지식만 있으면 된다. http.. 2006. 4. 16.
뷔퐁의 바늘 파이썬 2.4로 작성했다. 참 http://www.pygame.org 에서 pygame 라이브러리도 다운받아 설치해야한다. 뷔퐁의 바늘(Buffon's needle)은 바늘 크기보다 크게 간격을 잡고, 양 끝에 닿는 수자를 측정한 것이 점점 3.14에 근접해가는 것을 보여준다. 이 프로그램에서는 바늘을 10만번 던지고 그중 32%쯤 양 끝에 닿는다. 2006. 3. 29.
AJAX 두번째 샘플 첫번째 샘플을 뜯어보면서 많은 이해를 할 수 있었다. 간단하게나마 구조를 파악할 수 있었다. 이 샘플은 첫번째 샘플을 약간 변형한 것이다. 제목과 주소를 입력받아 로딩없이 웹페이지에 추가된 목록을 보여준다. 2006. 3. 22.
틱택토 학교숙제로 작성한 간단한 프로그램. 숙제 요구 사항이 그저 끝난 후 재시작을 할 수 있게 하는것이라 완성도는 엉망 -_-; 원본은 '변영철 교수의 비주얼 C++' 강의에 나온 소스인데, 그 소스가 참으로 복잡하게 짜여져있어 나에 맞게 수정했다. 어째서, 0과 O을 같이 쓰고, 가끔 전역 변수와 지역 변수를 오가면서 플래그를 체크하는데 참으로 혼란스러웠다. 2006. 3. 21.
원과 파이 그리기 설정된 크기의 원을 그리고, 그 위에 역시 설정된 크기의 파이를 그리는 프로그램. 역시 숙제이며, managed C++로 짜여졌다. 참, .net 2.0 필수 2006. 3. 10.
행렬 곱셈 계산기 학교 숙제로 나온 문제. managed C++로 해보았다. .net 과 native C++을 결합할 수 있다는데... Visual Express 2005를 이용했다. 웬지 C# 그 자체가 되버린듯한 느낌. 포인터가 없고 참조형 연산자인 ^ 덕분에 많은 검색이 요구되었다. 그래도 응용 프로그램만들기는 쉽다. 2006. 3. 10.
C++를 이용한 게임 상태 관리 현재와 같이 메시지 기반의 멀티 태스킹 환경에 효율적으로 적용할 수 있는 게임 엔진. 콘솔용으로 만든 테트리스를 렌더링 엔진으로 돌리려고 했는데, Ogre3D가 callback 기반이다보니 소개 -> 메뉴 -> 게임 -> 메뉴 로 반복되는 과정을 포현하는데 너무나 많은 플래그가 소용되었다. 역시 이 문제또한 선각자들이 이미 고민했던 것으로, 해결법 또한 비교적 쉽다. 게다가 완전히 컴파일되는 코드까지 첨부되어 있다. Managing Game States in C++ 원문 http://tonyandpaige.com/tutorials/game1.html 게임에서 여러 다른 상태가 있다는 걸 몇년 전 한 데모를 보면서 알게 되었다. 이 데모란 것이 미출시 게임에 대한 맛보기판이 아니라, scene 에 서 본 .. 2006. 2. 21.
테트리스 그 동안 공부한 것을 테스트해보기 위해 급히 만든 테트리스. 현재는 도스 용이다. 네트워크 모듈도 붙일 예정(이건 동훈이가 함)인데, 혼자하는 것보다 생각해야할 것들이 많다. 이래저래 많다. 코드가 조금 긴데, 나름대로 확장성(임의 개수의 블록, 임의 크기의 게임 판, 임의의 플레이어 수)을 생각하느냐 그런 듯 싶다. 별 기능도 없는데 코드가 길어져서 웬지 무안하다. // 싱글, 멀티 플랫폼 분리. 자동 블록 떨어지기 추가. 완전 메시지 방식 // for network play test 그건 그렇고 메모리 누수는 없는지 걱정된다. 처음에 웬일인지 프로그램이 종료되기 위해 5초 이상 걸리는 일도 있어서(지금은 코드를 엎어서 다행히 해방), 가능한 메모리 관리를 적게 할 수 있는 STL을 적극 사용했다. 최.. 2006. 2. 13.
ACM 10050, Hartals http://acm.uva.es/p/v100/10050.html 간단한 문제. 7로 나누는 바람에 조금 헤맸다. 2006. 1. 26.
ACM 105, The Skyline Problem ※ 파란에서 이전하면서 코드가 없어졌다... 이런. 다시 짜야할 듯 허... 주어진 건물의 외곽선만을 얻는 문제이다. 따라서 선분(left == right 인 입력. 폭이 0이므로 보이지 않는다)은 무시해도 된다. 출력 형태는 생소할 수 있는데, 상향 벡터와 하향 벡터를 이용한다. 경계값 때문에 수 시간을 고생한 것이 아주아주 기억에 남는다... 여기 사용한 알고리즘은 글보다 그림으로 설명하는 편이 낫다. 세 개의 건물 값을 입력받았다고 가정하자. 먼저 prevHighestBuilding(건물의 폭과 높이를 멤버 변수로 가진다)을 잡아야 한다. 이 변수의 값을 폭은 10000(문제에서 지정한 최대값), 높이는 0으로 둔다. 이제 0부터 시작해서 10000까지 x축을 탐색한다. 그러는 중에 점을 발견하면 .. 2006. 1. 24.