본문 바로가기
반응형

Programming401

알파 오브젝트 정렬 며칠전에 알파 블렌딩 때 오류가 난나는 분의 문의 메일을 받았는데, 이유는 그것이 아니었지만, 알파 블렌딩에서 필요한 요소 기술들을 많이 모르고 있어서 여기에 소개하고자 합니다. 알파 블렌딩을 할 때, 제일 먼저 신경 써주어야 하는 것은 그리는 순서입니다. 불투명 오브젝트는 Z-Buffer(또는 뎁스버퍼)의 도움으로 그리는 순서에 상관없이 카메라로부터 가까운 거리의 오브젝트는 먼 거리의 오브젝트를 가리게 됩니다. 그러나 투명 오브젝트는 Z-Buffer의 도움을 받을 수가 없죠. 그리는 순서에 따라서 결과값이 달라지게 됩니다. 예를 들어서 노란색에 50% 투명도를 가지고 있는 오브젝트 A와 파란색에 50% 투명도를 가지고 있는 오브젝트 B가 있다고 하죠. A 오브젝트가 B 오브젝트에 비해서 카메라로부터 거.. 2011. 9. 19.
이벤트 핸들링에서의 case 문장 이벤트 핸들링 방식으로 프로그램을 짠다면, 유용하게 사용할만한 방법입니다. Visual C/C++ 기준입니다. #if defined(_DEBUG) #define CASE(X) case X: OutputDebugString("[" #X "]\n") #else #define CASE(X) case X: #endif void proc(int event, unsigned short wParam, unsigned long lParam) { switch(event) { CASE(EVENT_START); { ... break; } .... } } 이런 식으로 프로그램을 짜면, 디버그 모드일때는 이벤트 값을 디버그 창에 계속 뿌려주게 됩니다. 릴리즈 모드일때에는 불필요한 코드를 없애줄 수 있습니다. 프로그램을 짤 때 .. 2011. 9. 16.
조건문의 최적화 방법 if 문장 안에 쓴 조건문의 표현 방식에 따라서 속도차이가 발생한다는 것입니다. 요즘 진보된 프로세서에서는 이것마저도.. 아주 훌륭하게 잘 처리되고 있지만.. (실제.. 조건문을 두세단계정도는 미리 계산하는 것이 요즘프로세서던가?? 테스트해보질 않아서.. 하하.. 나중에 기회가 되면 한번 속도 테스트해보아야지.. :) 예를 들어서 조건문 A의 확률이 80%, 조건문 B의 확률이 20%였다면, 다음의 두 조건문은 같은 기능을 하지만 속도에서는 약간 차이가 발생합니다. if(A || B) return; if(B || A) return; 이경우.. 첫번째 조건문은 80%확률로 A 조건을 검사하고, 20% 확률로 A 조건과 B 조건을 검사합니다. 두번째 조건문은 20% 확률로 B 조건을 검사하고 80% 확률로 .. 2011. 9. 16.
이중 링크드 리스트 만들기 (Making double linked list) 링크드 리스트가 단일인 경우에는 포인터로 처리하는 것이 좋겠지만, 이중인 경우에는 그게 만만치 않아요. 포인터로 관리하려면, 포인터가 NULL인 경우 처리가 필요합니다. 새로운 노드를 추가하는 경우에는 포인터가 NULL인지 검사해야 하고, 기존 노드를 삭제하는 경우에는 노드의 갯수가 1개인지를 검사해야 합니다. 그래서 사용하는 방법은 바로 이것입니다. 클래스만 설계해보면, class CNode { public: CNode *m_pPrev; CNode *m_pNext; }; class CIntNode : public CNode { public: int data; }; class CDLinkedList { public: CDLinkedList() { m_kRoot.m_pPrev = &m_kRoot; m_kR.. 2011. 9. 16.
미로찾기 프로그램 미로의 크기는 10x10 으로, [0,0] 이 입구, [ 9,9]를 출구로 했습니다. 미로로 사용되는 데이터파일에는 다음과 같은 형식으로 미로가 지정되어 있습니다. 0 0 1 1 1 1 1 1 1 1 1 0 0 0 1 1 0 0 0 1 ... 1 1 1 1 1 0 1 1 1 0 즉 갈 수 있는 셀(cell)은 0으로 갈 수 없는 셀은 1로 설정되어 있죠. 사용한 알고리즘은 제일 간단한 방법을 사용했습니다. 더 좋은 방법이 당연히 있지만.. 2011. 9. 16.
728x90