본문 바로가기

전체 글54

Depth Buffer에 관하여 x,y,z는 3차원 공간상의 좌표가 아니다. x.y는 2D상의 점의 좌표이고, z는 깊이값이다. 즉, 우선 순위 값(Depth 값)이다. z는 0.0f ~ 1.0f 사이의 값을 가지고, 벗어나면 그려지지 않는다. Depth값이 낮을 수록 우선 순위가 높고, 우선 순위가 높으면 낮은 그림이 그려질 때 자신보다 높은 부분은 안그린다. 항상 새로운 그림을 그릴려면 Render Target과 같은 해상도의 Depth Buffer를 준비해서 Clear시 1.0f으로 Clear 해줘야 한다. Depth Buffer를 사용안 할 수도 있다. 그러면 위에 계속 덮어 그리게 된다. 2014. 9. 22.
Indexed Primitive 구현과 Alpha Blending 사용 // 알파 블렌딩 설정 g_pd3dDevice->SetRenderState(D3DRS_ALPHABLENDENABLE, TRUE); g_pd3dDevice->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_SRCALPHA); g_pd3dDevice->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA); HRESULT InitIB() { // Index Buffer 설정 MYINDEX indices[] = { {0, 1, 2}, {3, 2, 1} }; if(FAILED(g_pd3dDevice->CreateIndexBuffer(2*sizeof(MYINDEX), 0, D3DFMT_INDEX16, D3DPOOL_DEFAULT, &g_pIB, NU.. 2014. 9. 22.
[STL] vector, deque, list - 배열과 동일하게 연속적인 메모리 공간에 저장한다. 하여 원소들간의 포인터 연산이 가능하다.- 개별 원소들에 대해서 iterator 접근 외에도 position index를 통하여 접근이 가능하다.- 어떠한 순서로도 원소 순회가 가능하다. random access iterating이 가능하다.- 동적으로 할당이 가능한 dynamic array로 구현되어 있다.- 원소 끝부분에 삽입/삭제는 빠르나, 그 외 부분에서의 삽입/삭제는 deque, list에 비해 현저히 느리다.- 동적으로 컨테이너의 크기가 확장/축소가 가능하나, 확장시 전체 메모리 크기만큼 reallocating이 발생함으로 비용이 크다.- capacity를 확장시켜줄 수 있도록 적절한 크기의 reserve로 인한 메모리 확보가 중요하다. -.. 2014. 9. 22.
가상 소멸자의 사용 이유 - 클래스 내부에서 메모리를 동적할당하는 경우 소멸자에서 메모리 해제를 해주는데, 상속받은 부모의 소멸자가 가상 소멸자가 아닌 경우 객체 생성시 실제 객체의 클래스가 아닌, 생성된 포인터 자료형에 따라 소멸자가 호출된다. 결국 부모 클래스의 소멸자만 호출되고 메모리 누수가 발생한다. 하여 다형성을 지원할 수 있는 기본 클래스의 경우 소멸자를 가상함수로 지정해 놓아야한다. 예를 들면 Class A{A();~A();} Class B : public A{B();~B();} 이렇게 있을 경우 효율적인 객체 관리 (다형성) 를 위해 A* a = new B(); 이런식으로 B 객체를 A 클래스 포인터 자료형으로 만들어서 A* 객체들을 관리할 수 있다.하지만 이때 객체 a의 실제 객체는 B 클래스다.여기서 a가 파괴.. 2014. 9. 22.