블로그 이미지
fiadot_old

칼퇴근을 위한 게임 서버 개발 방법론에 대한 심도있는 고찰 및 성찰을 위한 블로그!

Rss feed Tistory
Technical Article/펌 2003. 6. 10. 23:46

삼각형을 그려보자~

1. 디바이스 생성하고 나서...

2. FVF(Flexible vertex format- 유동 정점 포맷)를 정의하고~~

// The 3-D vertex format and descriptor
typedef struct {
  FLOAT x, y, z;     // 3-D coordinates
  FLOAT rhw;         // rhw
  D3DCOLOR Diffuse;  // Diffuse color component
} sVertex;
#define VERTEXFVF (D3DFVF_XYZRHW | D3DFVF_DIFFUSE)

// Vertex buffer
IDirect3DVertexBuffer8 *g_pVB      = NULL;


3. 버텍스 값을 넣어준다!!!

        BYTE *Ptr;
        sVertex Verts[4] = {
                { 0.0f, 0.0f, 0.0f, 1.0f, D3DCOLOR_RGBA(255,0,255,100) },
        //        { 100.0f, 110.0f, 110.0f, 1.0f, D3DCOLOR_RGBA(155,0,155,100) },
                { 150.0f, 300.0f, 0.0f, 1.0f, D3DCOLOR_RGBA(255,0,0,100) },
                { 300.0f, 0.0f, 0.0f, 1.0f, D3DCOLOR_RGBA(0,0,255,100)  },
                { 0.0f, 0.0f, 0.0f, 1.0f, D3DCOLOR_RGBA(255,0,255,100) }

                                        };
        
4. 버텍스 생성해서 락걸고 디바이스에 잡아넣는다!

        // Create the vertex buffer and set data
        g_pD3DDevice->CreateVertexBuffer(sizeof(sVertex)*4, 0, VERTEXFVF, D3DPOOL_DEFAULT, &g_pVB);
        g_pVB->Lock(0,0, (BYTE**)&Ptr, 0);
        memcpy(Ptr, Verts, sizeof(Verts));
        g_pVB->Unlock();



5. 매 프레임 마다 뿌려준다!

  g_pD3DDevice->Clear(0, NULL, D3DCLEAR_TARGET, D3DCOLOR_RGBA(0,0,0,255), 1.0f, 0);

  // Begin scene
  if(SUCCEEDED(g_pD3DDevice->BeginScene()))
  {
    // Set the vertex stream and shader
    g_pD3DDevice->SetStreamSource(0, g_pVB, sizeof(sVertex));
    g_pD3DDevice->SetVertexShader(VERTEXFVF);

    g_pD3DDevice->SetRenderState(D3DRS_ALPHABLENDENABLE, TRUE);
    g_pD3DDevice->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_SRCALPHA);
    g_pD3DDevice->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA);

6. 밑에 부분 중요!!
D3DPT_TRIANGLESTRIP은 첫번째 폴리곤에는 처음 3개의 점을 사용해서 그담에 이어지는 각각의 폴리곤에는 추가되는 정점 하나만을 사용하여 폴리곤의 스트립을 그리는 옵션~~
흐흐.. 졸라 말이 어렵다...
그냥 삼각형 그릴려면 버텍스 4개로 다음과 같이해주니까 되드라 ㅡㅡ;;
    g_pD3DDevice->DrawPrimitive(D3DPT_TRIANGLESTRIP, 0, 2);

    // End the scene
    g_pD3DDevice->EndScene();
  }

  // Display the scene
  g_pD3DDevice->Present(NULL, NULL, NULL, NULL);


7. 이렇게 해주면 떙^^ 삼각형 나온다~ 으하하하


역시 코딩하고 결과보고 디버깅좀 하고 그래해야 맛이나지..ㅋㅋ



근데...

버텍스를 4개를 썼는데...저렇게 할필요가 있나..

트라이앵글리스트를 쓰면 3개로 끝낼수 있을꺼 같은데...

ㅎㅎ

,
TOTAL TODAY