본문 바로가기

전체 글54

Texture 출력하기 전역 변수 선언 LPDIRECT3DTEXTURE9g_pTex = NULL; CUSTOMVERTEX 정의 struct CUSTOMVERTEX { FLOAT x, y, z;// 좌표 FLOAT tu, tv; // 텍스쳐 좌표 }; #define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZ | D3DFVF_TEX1) Texture 로드 D3DXCreateTextureFromFile(g_pd3dDevice, L"hwa.png", &g_pTex); Vertex 좌표 설정 CUSTOMVERTEX vertices[] = { // Vertex Buffer를 모두 정의 { -0.6f, 0.5f, 0.0f, 0.0f, 0.0f}, { 0.4f, 0.5f, 0.0f, 1.0f, 0.0f}, { -0.6f, -0.. 2014. 9. 22.
RenderState Device : 3D 렌더링의 주체- SetRenderState (옵션이름, 옵션 값); Rendering Pipeline- Draw Primitive 함수는 Device에 설정된 세팅을 모두 사용해서 Rendering을 처리하게 된다. - Draw Primitive 함수는 단순히 그리기가 아니다. Device의 설정을 실행시키는 역할 - 이 때, 여러가지 과정을 거쳐 Rendering이 되는데, 이 과정을 Rendering Pipeline이라 한다. - Rendering Pipeline은 여러 과정으로 되어있다. - 이 과정들의 옵션은 여러가지가 있다. - 이 옵션들을 총합, 여러 과정을 거쳐 최종적으로 래스터라이즈가 동작한다. - Pixel 단위로 동작하는 래스터라이즈는 여러 과정을 거쳐 동작하고, .. 2014. 9. 22.
DrawPrimitive DrawIndexPrimitive> 1개의 삼각형을 그릴려면 3개의 Vertex가 필요 여러개를 그리면 중복되는 Vertex가 생기므로 낭비가 생긴다. 방법 1. Triangle Strip - 하나의 중점 기준으로 Pan 형태의 그리는 형태 - Vertex 수를 왕창 줄일 수 있지만, 한붓 그리기 형태의 띠 모양의 삼각형이 아니면 그리기 힘들다. - 바로 앞의 2개의 Vertex와 새로 추가된 Vertex 1개를 합쳐서 삼각형을 그린다. 방법 2. Triangle Fan - Triangle Strip과 원리는 비슷하다. - 마찬가지로 Vertex 수를 왕창 줄일 수 있지만, Fan 형태의 삼각형이 아니면 그리기 힘들다. - 제일 앞의 1개와 바로 앞의 1개, 새로 추가된 Vertex 1개를 합쳐서 삼각형.. 2014. 9. 22.
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.
메모리 단편화 - 메모리를 할당, 해제를 반복하다가 보면 할당되어있지 않은 메모리지만 조그맣게 나누어져 존재하는 구간이 생기게 된다.- 이렇게 나누어진 메모리 공간이 늘어나다보면 분명 총 메모리량은 부족하지 않은데, 메모리 할당이 불가능한 경우가 발생한다. 이것이 메모리 단편화이다. - 해결 방안 : 자주 동적할당을 하게 되는 메모리의 크기를 요소로 가지는 메모리 풀을 미리 만들어놓고, 그때그때마다 제공한다. 한번에 일정량을 할당받아 놓기 때문에 할당/해제를 반복하게 되는 경우가 사라진다. 2014. 9. 22.
to 부정사 ~하는 것 : to ~ 공부하는 것 : to study 공부하다 : study ~안에 들어올 수 있는 단어는 계속해서 생겨난다. 단어 갯수나 뜻의 갯수가 고정되어 있지 않고 부정확하므로 to 부정사라 한다. "공부하다"라는 동사를 "공부하는 것" 처럼 명사화시켰다. 즉, to 부정사는 동사를 명사처럼 사용하기 빠른 방법이다. 이상적인 문장 배열 1 2 3 4 5 명사 + 동사 + 명사 / 전치사 + 명사 (형용사) 1,3,5번 명사의 자리에 to 부정사를 사용해서 동사를 넣을 수 있다. 2013. 12. 12.